From 3fefd1929e49c280ae7187ae461674c8be93b6a3 Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 19 Apr 2024 10:52:05 +0700 Subject: [PATCH] Disable outside dismissible confirm dialog in composer --- .../mixin/message_dialog_action_mixin.dart | 4 +++ .../presentation/composer_controller.dart | 31 ++++++++----------- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/lib/features/base/mixin/message_dialog_action_mixin.dart b/lib/features/base/mixin/message_dialog_action_mixin.dart index 0e542d15f..9bada5762 100644 --- a/lib/features/base/mixin/message_dialog_action_mixin.dart +++ b/lib/features/base/mixin/message_dialog_action_mixin.dart @@ -21,6 +21,7 @@ mixin MessageDialogActionMixin { bool hasCancelButton = true, bool showAsBottomSheet = false, bool alignCenter = false, + bool outsideDismissible = true, List? listTextSpan, Widget? icon, TextStyle? titleStyle, @@ -72,6 +73,7 @@ mixin MessageDialogActionMixin { ).build() ), barrierColor: AppColor.colorDefaultCupertinoActionSheet, + barrierDismissible: outsideDismissible ); } else { if (responsiveUtils.isMobile(context)) { @@ -120,6 +122,7 @@ mixin MessageDialogActionMixin { isScrollControlled: true, barrierColor: AppColor.colorDefaultCupertinoActionSheet, backgroundColor: Colors.transparent, + isDismissible: outsideDismissible, enableDrag: true, ignoreSafeArea: false, shape: const RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(18))), @@ -178,6 +181,7 @@ mixin MessageDialogActionMixin { .build() ), barrierColor: AppColor.colorDefaultCupertinoActionSheet, + barrierDismissible: outsideDismissible ); } } diff --git a/lib/features/composer/presentation/composer_controller.dart b/lib/features/composer/presentation/composer_controller.dart index 4c9a68325..30b9f6fb7 100644 --- a/lib/features/composer/presentation/composer_controller.dart +++ b/lib/features/composer/presentation/composer_controller.dart @@ -1178,7 +1178,7 @@ class ComposerController extends BaseController with DragDropFileMixin { resultState is GenerateEmailFailure) && context.mounted ) { - _showConfirmDialogWhenSaveMessageToDraftsFailure( + await _showConfirmDialogWhenSaveMessageToDraftsFailure( context: context, failure: resultState, onConfirmAction: () { @@ -1875,8 +1875,9 @@ class ComposerController extends BaseController with DragDropFileMixin { _closeComposerButtonState = ButtonState.disabled; - if (composerArguments.value == null) { - log('ComposerController::handleClickCloseComposer: ARGUMENTS is NULL'); + if (composerArguments.value == null || !_isEmailBodyLoaded) { + log('ComposerController::handleClickCloseComposer: ARGUMENTS is NULL or EMAIL NOT LOADED'); + _closeComposerButtonState = ButtonState.enabled; clearFocus(context); _closeComposerAction(); return; @@ -1891,15 +1892,7 @@ class ComposerController extends BaseController with DragDropFileMixin { if (isChanged && context.mounted) { clearFocus(context); - _showConfirmDialogSaveMessage(context); - return; - } - - if (!_isEmailBodyLoaded && context.mounted) { - log('ComposerController::handleClickCloseComposer: EDITOR NOT LOADED'); - _closeComposerButtonState = ButtonState.enabled; - clearFocus(context); - _closeComposerAction(); + await _showConfirmDialogSaveMessage(context); return; } @@ -1910,14 +1903,15 @@ class ComposerController extends BaseController with DragDropFileMixin { } } - void _showConfirmDialogSaveMessage(BuildContext context) { - showConfirmDialogAction( + Future _showConfirmDialogSaveMessage(BuildContext context) async { + await showConfirmDialogAction( context, title: AppLocalizations.of(context).saveMessage.capitalizeFirstEach, AppLocalizations.of(context).warningMessageWhenClickCloseComposer, AppLocalizations.of(context).save, cancelTitle: AppLocalizations.of(context).discardChanges, alignCenter: true, + outsideDismissible: false, onConfirmAction: () async => await Future.delayed( const Duration(milliseconds: 100), () => _handleSaveMessageToDraft(context) @@ -2038,7 +2032,7 @@ class ComposerController extends BaseController with DragDropFileMixin { resultState is GenerateEmailFailure) && context.mounted ) { - _showConfirmDialogWhenSaveMessageToDraftsFailure( + await _showConfirmDialogWhenSaveMessageToDraftsFailure( context: context, failure: resultState ); @@ -2106,19 +2100,20 @@ class ComposerController extends BaseController with DragDropFileMixin { cancelToken?.cancel([SavingEmailToDraftsCanceledException()]); } - void _showConfirmDialogWhenSaveMessageToDraftsFailure({ + Future _showConfirmDialogWhenSaveMessageToDraftsFailure({ required BuildContext context, required FeatureFailure failure, VoidCallback? onConfirmAction, VoidCallback? onCancelAction, - }) { - showConfirmDialogAction( + }) async { + await showConfirmDialogAction( context, title: '', AppLocalizations.of(context).warningMessageWhenSaveEmailToDraftsFailure, AppLocalizations.of(context).edit, cancelTitle: AppLocalizations.of(context).closeAnyway, alignCenter: true, + outsideDismissible: false, onConfirmAction: onConfirmAction ?? () { _closeComposerButtonState = ButtonState.enabled; _autoFocusFieldWhenLauncher();