TF-3952 Change modal style in Forwarding

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-08-08 01:06:50 +07:00
committed by Dat H. Pham
parent 765b7e295b
commit f8d93e738b
10 changed files with 74 additions and 36 deletions
@@ -254,6 +254,7 @@ class _BodyContent extends StatelessWidget {
style: ThemeUtils.textStyleM3HeadlineSmall.copyWith( style: ThemeUtils.textStyleM3HeadlineSmall.copyWith(
color: AppColor.textPrimary, color: AppColor.textPrimary,
), ),
textAlign: TextAlign.center,
), ),
) )
: const SizedBox.shrink(); : const SizedBox.shrink();
@@ -42,6 +42,7 @@ mixin MessageDialogActionMixin {
bool useIconAsBasicLogo = false, bool useIconAsBasicLogo = false,
bool isScrollContentEnabled = false, bool isScrollContentEnabled = false,
EdgeInsetsGeometry? dialogMargin, EdgeInsetsGeometry? dialogMargin,
EdgeInsets? outsideDialogPadding,
} }
) async { ) async {
final responsiveUtils = Get.find<ResponsiveUtils>(); final responsiveUtils = Get.find<ResponsiveUtils>();
@@ -61,6 +62,10 @@ mixin MessageDialogActionMixin {
confirmText: actionName, confirmText: actionName,
cancelText: hasCancelButton ? cancelTitle ?? AppLocalizations.of(context).cancel : '', cancelText: hasCancelButton ? cancelTitle ?? AppLocalizations.of(context).cancel : '',
iconWidget: icon, iconWidget: icon,
outsideDialogPadding: outsideDialogPadding ??
(responsiveUtils.isScreenWithShortestSide(context)
? const EdgeInsets.all(16)
: null),
cancelBackgroundButtonColor: cancelButtonColor, cancelBackgroundButtonColor: cancelButtonColor,
confirmBackgroundButtonColor: actionButtonColor, confirmBackgroundButtonColor: actionButtonColor,
cancelLabelButtonColor: cancelLabelButtonColor, cancelLabelButtonColor: cancelLabelButtonColor,
@@ -123,10 +123,11 @@ class ForwardController extends BaseController {
context, context,
title: AppLocalizations.of(context).deleteRecipient, title: AppLocalizations.of(context).deleteRecipient,
AppLocalizations.of(context).messageConfirmationDialogDeleteRecipientForward(emailAddress), AppLocalizations.of(context).messageConfirmationDialogDeleteRecipientForward(emailAddress),
AppLocalizations.of(context).cancel, AppLocalizations.of(context).remove,
cancelTitle: AppLocalizations.of(context).remove, cancelTitle: AppLocalizations.of(context).cancel,
onCancelAction: () => _handleDeleteRecipientAction({emailAddress}), onCloseButtonAction: popBack,
showAsBottomSheet: true, onConfirmAction: () => _handleDeleteRecipientAction({emailAddress}),
alignCenter: true,
dialogMargin: MediaQuery.paddingOf(context).add(const EdgeInsets.only(bottom: 12)), dialogMargin: MediaQuery.paddingOf(context).add(const EdgeInsets.only(bottom: 12)),
); );
} }
@@ -207,10 +208,11 @@ class ForwardController extends BaseController {
context, context,
title: AppLocalizations.of(context).deleteRecipient, title: AppLocalizations.of(context).deleteRecipient,
AppLocalizations.of(context).messageConfirmationDialogDeleteAllRecipientForward, AppLocalizations.of(context).messageConfirmationDialogDeleteAllRecipientForward,
AppLocalizations.of(context).cancel, AppLocalizations.of(context).remove,
cancelTitle: AppLocalizations.of(context).remove, cancelTitle: AppLocalizations.of(context).cancel,
onCancelAction: () => _handleDeleteRecipientAction(listEmailAddress), onConfirmAction: () => _handleDeleteRecipientAction(listEmailAddress),
showAsBottomSheet: true, onCloseButtonAction: popBack,
alignCenter: true,
dialogMargin: MediaQuery.paddingOf(context).add(const EdgeInsets.only(bottom: 12)), dialogMargin: MediaQuery.paddingOf(context).add(const EdgeInsets.only(bottom: 12)),
); );
} }
@@ -23,6 +23,7 @@ import 'package:tmail_ui_user/features/contact/presentation/widgets/contact_sugg
import 'package:tmail_ui_user/features/email/presentation/utils/email_utils.dart'; import 'package:tmail_ui_user/features/email/presentation/utils/email_utils.dart';
import 'package:tmail_ui_user/features/manage_account/domain/exceptions/forward_exception.dart'; import 'package:tmail_ui_user/features/manage_account/domain/exceptions/forward_exception.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
import 'package:tmail_ui_user/main/utils/app_config.dart'; import 'package:tmail_ui_user/main/utils/app_config.dart';
import 'package:tmail_ui_user/main/utils/app_utils.dart'; import 'package:tmail_ui_user/main/utils/app_utils.dart';
@@ -452,15 +453,27 @@ class _AutocompleteContactTextFieldWithTagsState extends State<AutocompleteConta
VoidCallback? confirmAction, VoidCallback? confirmAction,
VoidCallback? cancelAction VoidCallback? cancelAction
}) async { }) async {
final appLocalizations = AppLocalizations.of(context);
final forwardWarningMessage = AppConfig.forwardWarningMessage;
final title = forwardWarningMessage != null
? null
: appLocalizations.dialogWarningTitleForForwardsToOtherDomains;
final message = forwardWarningMessage
?? appLocalizations.dialogWarningMessageForForwardsToOtherDomains;
await showConfirmDialogAction( await showConfirmDialogAction(
context, context,
AppLocalizations.of(context).doYouWantToProceed, message,
AppLocalizations.of(context).no, AppLocalizations.of(context).yes,
title: AppConfig.getForwardWarningMessage(context), title: title,
cancelTitle: AppLocalizations.of(context).yes, cancelTitle: AppLocalizations.of(context).no,
alignCenter: true, alignCenter: true,
onConfirmAction: cancelAction, onConfirmAction: confirmAction,
onCancelAction: confirmAction, onCancelAction: cancelAction,
onCloseButtonAction: () {
popBack();
cancelAction?.call();
},
); );
} }
} }
@@ -4,6 +4,7 @@ import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/presentation/utils/theme_utils.dart'; import 'package:core/presentation/utils/theme_utils.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/utils/app_config.dart'; import 'package:tmail_ui_user/main/utils/app_config.dart';
class ForwardWarningBanner extends StatelessWidget { class ForwardWarningBanner extends StatelessWidget {
@@ -28,7 +29,9 @@ class ForwardWarningBanner extends StatelessWidget {
color: AppColor.lightGrayEAEDF2, color: AppColor.lightGrayEAEDF2,
), ),
child: Row( child: Row(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: responsiveUtils.isWebDesktop(context)
? CrossAxisAlignment.center
: CrossAxisAlignment.start,
children: [ children: [
SvgPicture.asset( SvgPicture.asset(
imagePaths.icInfoCircleOutline, imagePaths.icInfoCircleOutline,
@@ -40,7 +43,8 @@ class ForwardWarningBanner extends StatelessWidget {
const SizedBox(width: 8), const SizedBox(width: 8),
Expanded( Expanded(
child: Text( child: Text(
AppConfig.getForwardWarningMessage(context), AppConfig.forwardWarningMessage ??
AppLocalizations.of(context).messageWarningDialogForForwardsToOtherDomains,
style: ThemeUtils.textStyleInter400.copyWith( style: ThemeUtils.textStyleInter400.copyWith(
letterSpacing: 0.0, letterSpacing: 0.0,
color: AppColor.steelGray400, color: AppColor.steelGray400,
@@ -27,7 +27,7 @@ class KeepCopyInInboxWidget extends StatelessWidget {
} }
return Padding( return Padding(
padding: const EdgeInsets.only(top: 8), padding: const EdgeInsets.only(top: 8, bottom: 16),
child: Row( child: Row(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
@@ -12,7 +12,7 @@ class NumberOfRecipientWidget extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
final appLocalizations = AppLocalizations.of(context); final appLocalizations = AppLocalizations.of(context);
return Padding( return Padding(
padding: const EdgeInsets.symmetric(vertical: 36), padding: const EdgeInsets.only(top: 20, bottom: 36),
child: Row( child: Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
+12 -6
View File
@@ -3706,12 +3706,6 @@
"placeholders_order": [], "placeholders_order": [],
"placeholders": {} "placeholders": {}
}, },
"doYouWantToProceed": "Do you want to proceed?",
"@doYouWantToProceed": {
"type": "text",
"placeholders_order": [],
"placeholders": {}
},
"messageWarningDialogForForwardsToOtherDomains": "You are redirecting emails to another domain. This could be a security threat or considered illegal data extraction.", "messageWarningDialogForForwardsToOtherDomains": "You are redirecting emails to another domain. This could be a security threat or considered illegal data extraction.",
"@messageWarningDialogForForwardsToOtherDomains": { "@messageWarningDialogForForwardsToOtherDomains": {
"type": "text", "type": "text",
@@ -4659,5 +4653,17 @@
"type": "text", "type": "text",
"placeholders_order": [], "placeholders_order": [],
"placeholders": {} "placeholders": {}
},
"dialogWarningTitleForForwardsToOtherDomains": "You are redirecting emails to another domain.",
"@dialogWarningTitleForForwardsToOtherDomains": {
"type": "text",
"placeholders_order": [],
"placeholders": {}
},
"dialogWarningMessageForForwardsToOtherDomains": "This could be a security threat or considered illegal data extraction. Do you want to proceed?",
"@dialogWarningMessageForForwardsToOtherDomains": {
"type": "text",
"placeholders_order": [],
"placeholders": {}
} }
} }
+14 -6
View File
@@ -3848,12 +3848,6 @@ class AppLocalizations {
); );
} }
String get doYouWantToProceed {
return Intl.message(
'Do you want to proceed?',
name: 'doYouWantToProceed');
}
String get messageWarningDialogForForwardsToOtherDomains { String get messageWarningDialogForForwardsToOtherDomains {
return Intl.message( return Intl.message(
'You are redirecting emails to another domain. This could be a security threat or considered illegal data extraction.', 'You are redirecting emails to another domain. This could be a security threat or considered illegal data extraction.',
@@ -4912,4 +4906,18 @@ class AppLocalizations {
name: 'keepACopyInInboxDescription', name: 'keepACopyInInboxDescription',
); );
} }
String get dialogWarningTitleForForwardsToOtherDomains {
return Intl.message(
'You are redirecting emails to another domain.',
name: 'dialogWarningTitleForForwardsToOtherDomains',
);
}
String get dialogWarningMessageForForwardsToOtherDomains {
return Intl.message(
'This could be a security threat or considered illegal data extraction. Do you want to proceed?',
name: 'dialogWarningMessageForForwardsToOtherDomains',
);
}
} }
+5 -6
View File
@@ -1,10 +1,8 @@
import 'dart:io'; import 'dart:io';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:tmail_ui_user/features/login/data/network/config/oidc_constant.dart'; import 'package:tmail_ui_user/features/login/data/network/config/oidc_constant.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
class AppConfig { class AppConfig {
const AppConfig._(); const AppConfig._();
@@ -57,13 +55,14 @@ class AppConfig {
} }
} }
static String getForwardWarningMessage(BuildContext context) { static String? get forwardWarningMessage {
final forwardWarningMessage = dotenv.get( final forwardWarningMessage = dotenv.get(
'FORWARD_WARNING_MESSAGE', 'FORWARD_WARNING_MESSAGE',
fallback: AppLocalizations.of(context).messageWarningDialogForForwardsToOtherDomains); fallback: '',
);
if (forwardWarningMessage.trim().isEmpty) { if (forwardWarningMessage.trim().isEmpty) {
return AppLocalizations.of(context).messageWarningDialogForForwardsToOtherDomains; return null;
} }
return forwardWarningMessage; return forwardWarningMessage;