Disable outside dismissible confirm dialog in composer
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user