TF-3953 Close several modals when click outside

This commit is contained in:
DatDang
2025-08-07 14:14:50 +07:00
committed by Dat H. Pham
parent 44c17bc762
commit 9e7298bc76
34 changed files with 575 additions and 580 deletions
@@ -31,6 +31,7 @@ import 'package:tmail_ui_user/features/base/base_controller.dart';
import 'package:tmail_ui_user/features/base/before_reconnect_handler.dart';
import 'package:tmail_ui_user/features/base/before_reconnect_manager.dart';
import 'package:tmail_ui_user/features/base/mixin/auto_complete_result_mixin.dart';
import 'package:tmail_ui_user/features/base/mixin/message_dialog_action_manager.dart';
import 'package:tmail_ui_user/features/base/state/base_ui_state.dart';
import 'package:tmail_ui_user/features/base/state/button_state.dart';
import 'package:tmail_ui_user/features/composer/domain/exceptions/compose_email_exception.dart';
@@ -781,7 +782,7 @@ class ComposerController extends BaseController
}
if (!isEnableEmailSendButton.value) {
showConfirmDialogAction(context,
MessageDialogActionManager().showConfirmDialogAction(context,
AppLocalizations.of(context).message_dialog_send_email_without_recipient,
AppLocalizations.of(context).add_recipients,
title: AppLocalizations.of(context).sending_failed,
@@ -797,7 +798,7 @@ class ComposerController extends BaseController
.where((emailAddress) => !EmailUtils.isEmailAddressValid(emailAddress.emailAddress))
.toList();
if (listEmailAddressInvalid.isNotEmpty) {
showConfirmDialogAction(context,
MessageDialogActionManager().showConfirmDialogAction(context,
AppLocalizations.of(context).message_dialog_send_email_with_email_address_invalid,
AppLocalizations.of(context).fix_email_addresses,
onConfirmAction: () {
@@ -815,7 +816,7 @@ class ComposerController extends BaseController
}
if (subjectEmail.value == null || subjectEmail.isEmpty == true) {
showConfirmDialogAction(context,
MessageDialogActionManager().showConfirmDialogAction(context,
AppLocalizations.of(context).message_dialog_send_email_without_a_subject,
AppLocalizations.of(context).cancel,
cancelTitle: AppLocalizations.of(context).send_anyway,
@@ -830,7 +831,7 @@ class ComposerController extends BaseController
}
if (!uploadController.allUploadAttachmentsCompleted) {
showConfirmDialogAction(
MessageDialogActionManager().showConfirmDialogAction(
context,
AppLocalizations.of(context).messageDialogSendEmailUploadingAttachment,
AppLocalizations.of(context).got_it,
@@ -843,7 +844,7 @@ class ComposerController extends BaseController
}
if (uploadController.isExceededMaxSizeAttachmentsPerEmail()) {
showConfirmDialogAction(
MessageDialogActionManager().showConfirmDialogAction(
context,
AppLocalizations.of(context).message_dialog_send_email_exceeds_maximum_size(
filesize(mailboxDashBoardController.maxSizeAttachmentsPerEmail?.value ?? 0, 0)),
@@ -985,7 +986,7 @@ class ComposerController extends BaseController
appLocalizations: AppLocalizations.of(context),
exception: failure.exception,
);
await showConfirmDialogAction(
await MessageDialogActionManager().showConfirmDialogAction(
context,
title: '',
errorMessage,
@@ -1956,14 +1957,13 @@ class ComposerController extends BaseController
}
Future<void> _showConfirmDialogSaveMessage(BuildContext context) async {
await showConfirmDialogAction(
await MessageDialogActionManager().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,
autoPerformPopBack: false,
isArrangeActionButtonsVertical: true,
isScrollContentEnabled: responsiveUtils.isLandscapeMobile(context),
@@ -1987,6 +1987,7 @@ class ComposerController extends BaseController
}
},
);
_closeComposerButtonState = ButtonState.enabled;
}
void handleOnDragEnterHtmlEditorWeb(List<dynamic>? types) {
@@ -2212,7 +2213,7 @@ class ComposerController extends BaseController
exception: failure.exception,
isDraft: true,
);
await showConfirmDialogAction(
await MessageDialogActionManager().showConfirmDialogAction(
context,
title: '',
errorMessage,
@@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:model/email/prefix_email_address.dart';
import 'package:pointer_interceptor/pointer_interceptor.dart';
import 'package:tmail_ui_user/features/base/mixin/message_dialog_action_manager.dart';
import 'package:tmail_ui_user/features/composer/presentation/composer_controller.dart';
import 'package:tmail_ui_user/features/composer/presentation/extensions/composer_print_draft_extension.dart';
import 'package:tmail_ui_user/features/composer/presentation/extensions/handle_edit_recipient_extension.dart';
@@ -27,6 +28,7 @@ import 'package:tmail_ui_user/features/composer/presentation/widgets/web/from_co
import 'package:tmail_ui_user/features/composer/presentation/widgets/web/local_file_drop_zone_widget.dart';
import 'package:tmail_ui_user/features/composer/presentation/widgets/web/mobile_responsive_app_bar_composer_widget.dart';
import 'package:tmail_ui_user/features/composer/presentation/widgets/web/toolbar_rich_text_widget.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/verify_display_overlay_view_on_iframe_extension.dart';
class ComposerView extends GetWidget<ComposerController> {
@@ -39,6 +41,20 @@ class ComposerView extends GetWidget<ComposerController> {
@override
Widget build(BuildContext context) {
final iframeOverlay = Obx(() {
if (controller.mailboxDashBoardController.isDisplayedOverlayViewOnIFrame ||
MessageDialogActionManager().isDialogOpened) {
return Positioned.fill(
key: const ValueKey('tap-to-close'),
child: PointerInterceptor(
child: const SizedBox.expand(),
),
);
} else {
return const SizedBox.shrink();
}
});
return ResponsiveWidget(
responsiveUtils: controller.responsiveUtils,
mobile: MobileResponsiveContainerView(
@@ -329,6 +345,7 @@ class ComposerView extends GetWidget<ComposerController> {
return const SizedBox.shrink();
}
}),
iframeOverlay,
],
);
}
@@ -647,6 +664,7 @@ class ComposerView extends GetWidget<ComposerController> {
return const SizedBox.shrink();
}
}),
iframeOverlay,
],
);
}
@@ -967,6 +985,7 @@ class ComposerView extends GetWidget<ComposerController> {
return const SizedBox.shrink();
}
}),
iframeOverlay,
],
);
},