Disable outside dismissible confirm dialog in composer

This commit is contained in:
dab246
2024-04-19 10:52:05 +07:00
committed by Dat H. Pham
parent b326ae31de
commit 3fefd1929e
2 changed files with 17 additions and 18 deletions
@@ -21,6 +21,7 @@ mixin MessageDialogActionMixin {
bool hasCancelButton = true, bool hasCancelButton = true,
bool showAsBottomSheet = false, bool showAsBottomSheet = false,
bool alignCenter = false, bool alignCenter = false,
bool outsideDismissible = true,
List<TextSpan>? listTextSpan, List<TextSpan>? listTextSpan,
Widget? icon, Widget? icon,
TextStyle? titleStyle, TextStyle? titleStyle,
@@ -72,6 +73,7 @@ mixin MessageDialogActionMixin {
).build() ).build()
), ),
barrierColor: AppColor.colorDefaultCupertinoActionSheet, barrierColor: AppColor.colorDefaultCupertinoActionSheet,
barrierDismissible: outsideDismissible
); );
} else { } else {
if (responsiveUtils.isMobile(context)) { if (responsiveUtils.isMobile(context)) {
@@ -120,6 +122,7 @@ mixin MessageDialogActionMixin {
isScrollControlled: true, isScrollControlled: true,
barrierColor: AppColor.colorDefaultCupertinoActionSheet, barrierColor: AppColor.colorDefaultCupertinoActionSheet,
backgroundColor: Colors.transparent, backgroundColor: Colors.transparent,
isDismissible: outsideDismissible,
enableDrag: true, enableDrag: true,
ignoreSafeArea: false, ignoreSafeArea: false,
shape: const RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(18))), shape: const RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(18))),
@@ -178,6 +181,7 @@ mixin MessageDialogActionMixin {
.build() .build()
), ),
barrierColor: AppColor.colorDefaultCupertinoActionSheet, barrierColor: AppColor.colorDefaultCupertinoActionSheet,
barrierDismissible: outsideDismissible
); );
} }
} }
@@ -1178,7 +1178,7 @@ class ComposerController extends BaseController with DragDropFileMixin {
resultState is GenerateEmailFailure) && resultState is GenerateEmailFailure) &&
context.mounted context.mounted
) { ) {
_showConfirmDialogWhenSaveMessageToDraftsFailure( await _showConfirmDialogWhenSaveMessageToDraftsFailure(
context: context, context: context,
failure: resultState, failure: resultState,
onConfirmAction: () { onConfirmAction: () {
@@ -1875,8 +1875,9 @@ class ComposerController extends BaseController with DragDropFileMixin {
_closeComposerButtonState = ButtonState.disabled; _closeComposerButtonState = ButtonState.disabled;
if (composerArguments.value == null) { if (composerArguments.value == null || !_isEmailBodyLoaded) {
log('ComposerController::handleClickCloseComposer: ARGUMENTS is NULL'); log('ComposerController::handleClickCloseComposer: ARGUMENTS is NULL or EMAIL NOT LOADED');
_closeComposerButtonState = ButtonState.enabled;
clearFocus(context); clearFocus(context);
_closeComposerAction(); _closeComposerAction();
return; return;
@@ -1891,15 +1892,7 @@ class ComposerController extends BaseController with DragDropFileMixin {
if (isChanged && context.mounted) { if (isChanged && context.mounted) {
clearFocus(context); clearFocus(context);
_showConfirmDialogSaveMessage(context); await _showConfirmDialogSaveMessage(context);
return;
}
if (!_isEmailBodyLoaded && context.mounted) {
log('ComposerController::handleClickCloseComposer: EDITOR NOT LOADED');
_closeComposerButtonState = ButtonState.enabled;
clearFocus(context);
_closeComposerAction();
return; return;
} }
@@ -1910,14 +1903,15 @@ class ComposerController extends BaseController with DragDropFileMixin {
} }
} }
void _showConfirmDialogSaveMessage(BuildContext context) { Future<void> _showConfirmDialogSaveMessage(BuildContext context) async {
showConfirmDialogAction( await showConfirmDialogAction(
context, context,
title: AppLocalizations.of(context).saveMessage.capitalizeFirstEach, title: AppLocalizations.of(context).saveMessage.capitalizeFirstEach,
AppLocalizations.of(context).warningMessageWhenClickCloseComposer, AppLocalizations.of(context).warningMessageWhenClickCloseComposer,
AppLocalizations.of(context).save, AppLocalizations.of(context).save,
cancelTitle: AppLocalizations.of(context).discardChanges, cancelTitle: AppLocalizations.of(context).discardChanges,
alignCenter: true, alignCenter: true,
outsideDismissible: false,
onConfirmAction: () async => await Future.delayed( onConfirmAction: () async => await Future.delayed(
const Duration(milliseconds: 100), const Duration(milliseconds: 100),
() => _handleSaveMessageToDraft(context) () => _handleSaveMessageToDraft(context)
@@ -2038,7 +2032,7 @@ class ComposerController extends BaseController with DragDropFileMixin {
resultState is GenerateEmailFailure) && resultState is GenerateEmailFailure) &&
context.mounted context.mounted
) { ) {
_showConfirmDialogWhenSaveMessageToDraftsFailure( await _showConfirmDialogWhenSaveMessageToDraftsFailure(
context: context, context: context,
failure: resultState failure: resultState
); );
@@ -2106,19 +2100,20 @@ class ComposerController extends BaseController with DragDropFileMixin {
cancelToken?.cancel([SavingEmailToDraftsCanceledException()]); cancelToken?.cancel([SavingEmailToDraftsCanceledException()]);
} }
void _showConfirmDialogWhenSaveMessageToDraftsFailure({ Future<void> _showConfirmDialogWhenSaveMessageToDraftsFailure({
required BuildContext context, required BuildContext context,
required FeatureFailure failure, required FeatureFailure failure,
VoidCallback? onConfirmAction, VoidCallback? onConfirmAction,
VoidCallback? onCancelAction, VoidCallback? onCancelAction,
}) { }) async {
showConfirmDialogAction( await showConfirmDialogAction(
context, context,
title: '', title: '',
AppLocalizations.of(context).warningMessageWhenSaveEmailToDraftsFailure, AppLocalizations.of(context).warningMessageWhenSaveEmailToDraftsFailure,
AppLocalizations.of(context).edit, AppLocalizations.of(context).edit,
cancelTitle: AppLocalizations.of(context).closeAnyway, cancelTitle: AppLocalizations.of(context).closeAnyway,
alignCenter: true, alignCenter: true,
outsideDismissible: false,
onConfirmAction: onConfirmAction ?? () { onConfirmAction: onConfirmAction ?? () {
_closeComposerButtonState = ButtonState.enabled; _closeComposerButtonState = ButtonState.enabled;
_autoFocusFieldWhenLauncher(); _autoFocusFieldWhenLauncher();