initQR method

dynamic initQR(
  1. Function getter
)

Implementation

initQR(Function getter) async {
  pressed = true;
  notifyListeners();
  final prefs = await SharedPreferences.getInstance();
  final existingQRCode = prefs.getString('qr_code');
  final existingTimeToDeadline = prefs.getInt('time_to_deadline');
  final bool isExpired = existingTimeToDeadline == null
      ? true
      : (DateTime.now().millisecondsSinceEpoch > existingTimeToDeadline);
  if (existingQRCode == null || isExpired) {
    getter(url: "/user/generatelink").then((value) {
      if (value != null) {
        qrCode = value;
        timeToDeadline = (DateTime.now()
            .add(const Duration(minutes: 30))
            .millisecondsSinceEpoch);
        prefs.setString('qr_code', value);
        prefs.setInt('time_to_deadline', timeToDeadline!);
        qrLoaded = true;
        pressed = false;
        notifyListeners();
      } else {
        qrLoaded = false;
        pressed = false;
        notifyListeners();
      }
    });
  } else {
    qrCode = existingQRCode;
    timeToDeadline = existingTimeToDeadline;
    qrLoaded = true;
    pressed = false;
    notifyListeners();
  }
}