tryDisplay method

  1. @override
void tryDisplay(
  1. BuildContext context, {
  2. Option? option = const Option(),
  3. RatingButtonBuilder? ratingButtonBuilder,
  4. dynamic onSubmit(
    1. UserFeedback
    )?,
  5. VoidCallback? onSkip,
})
override

Display form after specific interval of time.

AppFeedback form will be displayed once duration provided in void init(FeedbackConfig config) is completed

If duration is remaing then nothing will be displayed

void checkAppFeedback() {
  feedback.tryDisplay(context, onSubmit: (feedback) {
    print(feedback.toString());
  });
}

Implementation

@override
void tryDisplay(
  BuildContext context, {
  Option? option = const Option(),
  RatingButtonBuilder? ratingButtonBuilder,
  Function(UserFeedback)? onSubmit,
  VoidCallback? onSkip,
}) async {
  assert(
      pref != null,
      "Seems like feedback form isn't initilise" +
          "\nTry to initilise the feedback form first by using below code" +
          "\n\n@override" +
          "\nvoid initState() {" +
          "\n feedbackForm.init(FeedbackConfig(duration: Duration(seconds: 10)));" +
          "\n super.initState();" +
          "\n}\n");

  /// Check if there is already a feedback in local cache
  var feedback = await pref!.getAppFeedback();
  if (feedback != null) {
    final diff = DateTime.now().difference(feedback.createdAt!);

    /// If user haven't submiited feedback
    /// And if initial feedback duration is found to be longer then user's provided duration.
    /// Display feedback form
    if (feedback.rating == null && diff.compareTo(config.duration) > 0) {
      /// Reset  timer to display FeedbackPage after [Option.duration]
      await pref!.saveAppFeedback(UserFeedback(createdAt: DateTime.now()));

      /// Display sheet
      display(
        context,
        onSubmit: onSubmit,
        option: option,
        onSkip: onSkip,
        saveToCache: true,
      );
    }

    /// If users alreay submitted his feedback
    /// And provided duration is expired then its time to ask user to give feedback again
    else if (feedback.rating != null && diff.compareTo(config.duration) > 0) {
      /// Reset save timing to display FeedbackPage after 7 Days.
      await pref!
          .saveAppFeedback(feedback.copyWith(createdAt: DateTime.now()));

      /// Display sheet
      display(context,
          onSubmit: onSubmit,
          option: option,
          onSkip: onSkip,
          saveToCache: true,
          ratingButtonBuilder: ratingButtonBuilder);
    } else {
      final remaing = config.duration - diff;
      Util.cprint("Remaing time: ${remaing.toString()}",
          display: config.displayLogs);
    }
  }
}