From 7d4a0275331d86a07a12a088945e5f73b7c76a4f Mon Sep 17 00:00:00 2001 From: cem256 Date: Sat, 8 Jun 2024 18:03:19 +0300 Subject: [PATCH] request app review once the user has analyzed text three times consecutively #19 --- lib/core/utils/snackbar/snackbar_utils.dart | 4 ++-- .../detector/presentation/cubit/detector_cubit.dart | 8 +++++++- .../detector/presentation/cubit/detector_state.dart | 2 ++ lib/feature/detector/presentation/view/detect_view.dart | 7 ++++++- 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/lib/core/utils/snackbar/snackbar_utils.dart b/lib/core/utils/snackbar/snackbar_utils.dart index 3bdc870..24e448c 100644 --- a/lib/core/utils/snackbar/snackbar_utils.dart +++ b/lib/core/utils/snackbar/snackbar_utils.dart @@ -9,7 +9,7 @@ abstract final class SnackbarUtils { ..hideCurrentSnackBar() ..showSnackBar( SnackBar( - padding: EdgeInsets.all(context.defaultValue), + padding: context.paddingAllDefault, content: Text( message, style: context.textTheme.bodyLarge?.copyWith( @@ -18,7 +18,7 @@ abstract final class SnackbarUtils { ), ), duration: DurationConstants.s4(), - behavior: SnackBarBehavior.fixed, + showCloseIcon: true, ), ); } diff --git a/lib/feature/detector/presentation/cubit/detector_cubit.dart b/lib/feature/detector/presentation/cubit/detector_cubit.dart index ba3ee21..9f5f2e7 100644 --- a/lib/feature/detector/presentation/cubit/detector_cubit.dart +++ b/lib/feature/detector/presentation/cubit/detector_cubit.dart @@ -67,7 +67,13 @@ class DetectorCubit extends Cubit { response.fold( (failure) => emit(state.copyWith(status: FormzStatus.submissionFailure, failure: failure)), - (result) => emit(state.copyWith(status: FormzStatus.submissionSuccess, result: result)), + (result) => emit( + state.copyWith( + status: FormzStatus.submissionSuccess, + result: result, + numberOfRequests: state.numberOfRequests + 1, + ), + ), ); } diff --git a/lib/feature/detector/presentation/cubit/detector_state.dart b/lib/feature/detector/presentation/cubit/detector_state.dart index b4e708f..340c336 100644 --- a/lib/feature/detector/presentation/cubit/detector_state.dart +++ b/lib/feature/detector/presentation/cubit/detector_state.dart @@ -6,6 +6,7 @@ class DetectorState with _$DetectorState { required FormzStatus status, required UserInputForm userInput, required DetectorEntity result, + required int numberOfRequests, Failure? failure, bool? hasCameraPermission, bool? hasGalleryPermission, @@ -15,5 +16,6 @@ class DetectorState with _$DetectorState { status: FormzStatus.pure, userInput: const UserInputForm.pure(), result: DetectorEntity.initial(), + numberOfRequests: 0, ); } diff --git a/lib/feature/detector/presentation/view/detect_view.dart b/lib/feature/detector/presentation/view/detect_view.dart index bff1c20..3949a8c 100644 --- a/lib/feature/detector/presentation/view/detect_view.dart +++ b/lib/feature/detector/presentation/view/detect_view.dart @@ -6,6 +6,7 @@ import 'package:gpt_detector/app/l10n/extensions/app_l10n_extensions.dart'; import 'package:gpt_detector/app/theme/theme_constants.dart'; import 'package:gpt_detector/app/widgets/gpt_elevated_button.dart'; import 'package:gpt_detector/core/extensions/context_extensions.dart'; +import 'package:gpt_detector/core/utils/rate_app/rate_app.dart'; import 'package:gpt_detector/core/utils/snackbar/snackbar_utils.dart'; import 'package:gpt_detector/feature/detector/data/model/detector/detector_model.dart'; import 'package:gpt_detector/feature/detector/presentation/cubit/detector_cubit.dart'; @@ -70,7 +71,7 @@ class _DetectViewBodyState extends State<_DetectViewBody> { @override Widget build(BuildContext context) { return BlocListener( - listener: (context, state) { + listener: (context, state) async { if (state.status.isSubmissionFailure) { state.failure!.whenOrNull( networkFailure: () => SnackbarUtils.showSnackbar( @@ -89,6 +90,10 @@ class _DetectViewBodyState extends State<_DetectViewBody> { message: context.l10n.unsupportedLanguage, ); } + // Show rate app dialog after 3 successful detection requests + if (state.numberOfRequests == 3) { + await RateAppUtils.rateApp(); + } }, child: SafeArea( child: Padding(