reveal static method
Implementation
static Future reveal(BuildContext context) async {
final IAppDataStore appDataStore = getObject();
final IDeviceInfo deviceInfo = getObject();
final canShowDialog = await appDataStore.canShowAppRatings();
// If user said no thanks, don't show the dialog.
if (!canShowDialog) {
return;
}
final lastSeenAt = await appDataStore.ratingShownAtMs();
// Use native iOS dialog if on iOS.
// iOS has limitation for 3 an year
// TODO: ask again next year
final lastSeen = DateTime.fromMillisecondsSinceEpoch(lastSeenAt);
final difference = DateTime.now().difference(lastSeen);
if (difference > const Duration(days: 365)) {
await appDataStore.setRatingShownCount(0);
}
final seenCount = await appDataStore.ratingShownCount();
await appDataStore.setRatingShownCount(seenCount + 1);
appDataStore.setRatingShownAtMs(DateTime.now().millisecondsSinceEpoch);
if (seenCount < 3) {
if (PlatformUtils.isIOS) {
deviceInfo.openIosReview();
return;
}
}
final IHubbleAnalytics analytics = getObject();
// ignore: use_build_context_synchronously
final action = await _openModal(context);
if (action == null) {
return;
}
analytics.selectAppRatingOption(
option: action.toString(),
);
if (action == _AppRatingDialogAction.rateNow) {
deviceInfo.openAppStore();
} else if (action == _AppRatingDialogAction.noThanks) {
await appDataStore.setCanShowAppRatings(false);
}
}