promptForReferralCode method

Future<bool> promptForReferralCode(
  1. String? referralCode
)

Implementation

Future<bool> promptForReferralCode(String? referralCode) async {
  try {
    final refCode = Requests.box.read('refCode');
    print(refCode);
    if (refCode != null && refCode.isNotEmpty) {
      bool isReferralValid = await checkReferralCode(refCode);
      if (isReferralValid) {
        bool updateSuccessfull = await setRefferalCode(refCode);
        Preferences.clearRefCode();
        return updateSuccessfull;
      }
    }

    if (referralCode == null) {
      final Completer<bool> completer = Completer<bool>();

      WidgetsBinding.instance.addPostFrameCallback((_) async {
        final context = navigatorKey.currentContext ??
            navigatorKey.currentState?.overlay?.context;
        if (context != null) {
          ReferralCodePopup.show(
            onSubmit: (referralCode) async {
              bool isReferralValid = await checkReferralCode(referralCode);
              if (!isReferralValid) {
                closeDialog(result: false);
                CustomFlashWidget.showFlashMessage(
                  type: FlashType.error,
                  title: "Error",
                  message: "Enter a valid referral code",
                );
                completer.complete(false);
              } else {
                bool updateSuccessfull =
                    await setRefferalCode(referralCode);
                log(updateSuccessfull.toString());
                closeDialog(result: updateSuccessfull);
                completer.complete(updateSuccessfull);
              }
            },
          );
        } else {
          print("Error: No valid context to show dialog.");
          completer.complete(false);
        }
      });

      return completer.future;
    }

    return true;
  } catch (e) {
    print(e.toString());
    return false;
  }
}