TF-3410 Update confirm dialog

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-01-09 01:43:13 +07:00
committed by Dat H. Pham
parent 352681b60e
commit 700e8bc479
20 changed files with 240 additions and 288 deletions
@@ -242,12 +242,14 @@ extension AppColor on Color {
static const steelGray200 = Color(0xFFAEB7C2);
static const blue700 = Color(0xFF208BFF);
static const steelGray400 = Color(0xFF818C99);
static const steelGray600 = Color(0xFF4E5966);
static const blue700 = Color(0xFF208BFF);
static const blue100 = Color(0xFFDFEEFF);
static const blue400 = Color(0xFF80BDFF);
static const m3Tertiary = Color(0xFF8C9CAF);
static const m3Neutral70 = Color(0xFFAEAAAE);
static const colorF3F6F9 = Color(0xFFF3F6F9);
static const m3SurfaceBackground = Color(0xFF1C1B1F);
static const mapGradientColor = [
[Color(0xFF21D4FD), Color(0xFFB721FF)],
@@ -1,25 +1,24 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:flutter/material.dart';
class ConfirmDialogButton extends StatelessWidget {
final String label;
final double? borderRadius;
final Color? backgroundColor;
final Color backgroundColor;
final EdgeInsetsGeometry? padding;
final int? maxLines;
final TextStyle? textStyle;
final TextStyle textStyle;
final VoidCallback? onTapAction;
const ConfirmDialogButton({
super.key,
required this.label,
required this.textStyle,
required this.backgroundColor,
this.borderRadius,
this.backgroundColor,
this.padding,
this.maxLines,
this.textStyle,
this.onTapAction
});
@@ -34,7 +33,7 @@ class ConfirmDialogButton extends StatelessWidget {
width: double.infinity,
height: maxLines == 1 ? 44 : null,
decoration: BoxDecoration(
color: backgroundColor ?? AppColor.primaryColor,
color: backgroundColor,
borderRadius: BorderRadius.all(Radius.circular(borderRadius ?? 10)),
),
alignment: Alignment.center,
@@ -46,12 +45,7 @@ class ConfirmDialogButton extends StatelessWidget {
textAlign: TextAlign.center,
maxLines: maxLines,
overflow: TextOverflow.ellipsis,
style: textStyle ?? Theme.of(context).textTheme.bodyMedium?.copyWith(
fontSize: 16,
height: 20 / 16,
fontWeight: FontWeight.w500,
color: Colors.white
)
style: textStyle
),
),
),
@@ -2,6 +2,7 @@
import 'package:core/core.dart';
import 'package:core/presentation/views/dialog/confirm_dialog_button.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
typedef OnConfirmButtonAction = void Function();
typedef OnCancelButtonAction = void Function();
@@ -39,6 +40,7 @@ class ConfirmDialogBuilder {
final List<TextSpan>? listTextSpan;
final int? titleActionButtonMaxLines;
final bool isArrangeActionButtonsVertical;
final bool useIconAsBasicLogo;
OnConfirmButtonAction? _onConfirmButtonAction;
OnCancelButtonAction? _onCancelButtonAction;
@@ -52,6 +54,7 @@ class ConfirmDialogBuilder {
this.maxWith = double.infinity,
this.titleActionButtonMaxLines,
this.isArrangeActionButtonsVertical = false,
this.useIconAsBasicLogo = false,
}
);
@@ -165,9 +168,7 @@ class ConfirmDialogBuilder {
key: _key,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(18))),
insetPadding: _outsideDialogPadding ?? const EdgeInsets.symmetric(
horizontal: 24.0,
vertical: 16.0),
insetPadding: _outsideDialogPadding,
alignment: _alignment ?? Alignment.center,
backgroundColor: _backgroundColor,
child: _bodyContent(),
@@ -181,24 +182,40 @@ class ConfirmDialogBuilder {
constraints: BoxConstraints(maxWidth: maxWith),
decoration: const BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(18))),
borderRadius: BorderRadius.all(Radius.circular(18)),
),
margin: _margin,
padding: const EdgeInsetsDirectional.only(
top: 8,
end: 8,
start: 16,
bottom: 24,
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
if (_onCloseButtonAction != null)
Align(
alignment: AlignmentDirectional.centerEnd,
alignment: AlignmentDirectional.topEnd,
child: TMailButtonWidget.fromIcon(
icon: _imagePath.icCircleClose,
iconSize: 30,
padding: const EdgeInsets.all(3),
icon: _imagePath.icCancel,
iconSize: 24,
iconColor: AppColor.steelGrayA540,
padding: const EdgeInsets.all(5),
backgroundColor: Colors.transparent,
margin: const EdgeInsetsDirectional.only(top: 16, end: 16),
onTapActionCallback: _onCloseButtonAction
)
),
if (_iconWidget != null)
onTapActionCallback: _onCloseButtonAction,
),
)
else
const SizedBox(height: 24),
if (useIconAsBasicLogo)
SvgPicture.asset(
_imagePath.icTMailLogo,
fit: BoxFit.fill,
width: 70,
height: 70,
)
else if (_iconWidget != null)
Container(
margin: _marginIcon ?? EdgeInsets.zero,
alignment: Alignment.center,
@@ -206,99 +223,139 @@ class ConfirmDialogBuilder {
),
if (_title.isNotEmpty)
Padding(
padding: _paddingTitle ?? const EdgeInsetsDirectional.only(top: 12, start: 24, end: 24),
padding: _paddingTitle
?? const EdgeInsetsDirectional.only(top: 16, end: 8,),
child: Center(
child: Text(
_title,
textAlign: TextAlign.center,
style: _styleTitle ?? const TextStyle(fontSize: 20.0, color: AppColor.colorActionDeleteConfirmDialog, fontWeight: FontWeight.w500)
style: _styleTitle ?? const TextStyle(
fontSize: 22.0,
color: AppColor.m3SurfaceBackground,
fontWeight: FontWeight.w600,
)
)
)
),
if (_textContent.isNotEmpty)
Padding(
padding: _paddingContent ?? const EdgeInsets.symmetric(horizontal: 16, vertical: 24),
padding: _paddingContent
?? const EdgeInsetsDirectional.only(top: 16, end: 8,),
child: Center(
child: Text(_textContent,
textAlign: TextAlign.center,
style: _styleContent ?? const TextStyle(fontSize: 17.0, color: AppColor.colorMessageDialog)
child: Text(
_textContent,
textAlign: TextAlign.center,
style: _styleContent ?? const TextStyle(
fontSize: 17.0,
color: AppColor.steelGrayA540,
fontWeight: FontWeight.w500,
),
),
),
)
else if (listTextSpan != null)
Padding(
padding: _paddingContent ?? const EdgeInsets.symmetric(horizontal: 16, vertical: 24),
padding: _paddingContent ??
const EdgeInsetsDirectional.only(top: 16, end: 8,),
child: Center(
child: RichText(
textAlign: TextAlign.center,
text: TextSpan(
style: _styleContent ?? const TextStyle(fontSize: 17.0, color: AppColor.colorMessageDialog),
children: listTextSpan
style: _styleContent ?? const TextStyle(
fontSize: 17.0,
color: AppColor.steelGrayA540,
fontWeight: FontWeight.w500,
),
children: listTextSpan,
),
),
),
),
if (_additionalWidgetContent != null)
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
padding:const EdgeInsetsDirectional.only(top: 16, end: 8,),
child: _additionalWidgetContent,
),
if (isArrangeActionButtonsVertical)
...[
if (_cancelText.isNotEmpty)
Padding(
padding: const EdgeInsetsDirectional.only(top: 8, start: 16, end: 16),
padding: const EdgeInsetsDirectional.only(top: 16, end: 8,),
child: ConfirmDialogButton(
label: _cancelText,
backgroundColor: _colorCancelButton,
borderRadius: _radiusButton,
textStyle: _styleTextCancelButton,
padding: _paddingButton,
maxLines: titleActionButtonMaxLines,
onTapAction: _onCancelButtonAction),
label: _cancelText,
backgroundColor: _colorCancelButton ?? AppColor.blue700,
borderRadius: _radiusButton,
textStyle: _styleTextCancelButton ?? const TextStyle(
fontSize: 17,
height: 24 / 17,
fontWeight: FontWeight.w500,
color: Colors.white,
),
padding: _paddingButton,
maxLines: titleActionButtonMaxLines,
onTapAction: _onCancelButtonAction),
),
if (_confirmText.isNotEmpty)
Padding(
padding: const EdgeInsetsDirectional.only(top: 8, start: 16, end: 16),
padding: const EdgeInsetsDirectional.only(top: 16, end: 8),
child: ConfirmDialogButton(
label: _confirmText,
backgroundColor: _colorConfirmButton,
borderRadius: _radiusButton,
textStyle: _styleTextConfirmButton,
padding: _paddingButton,
maxLines: titleActionButtonMaxLines,
onTapAction: _onConfirmButtonAction),
label: _confirmText,
backgroundColor: _colorConfirmButton ?? AppColor.colorF3F6F9,
borderRadius: _radiusButton,
textStyle: _styleTextConfirmButton ?? const TextStyle(
fontSize: 17,
height: 24 / 17,
fontWeight: FontWeight.w500,
color: AppColor.steelGray600,
),
padding: _paddingButton,
maxLines: titleActionButtonMaxLines,
onTapAction: _onConfirmButtonAction),
),
const SizedBox(height: 16),
]
else
Padding(
padding: _marginButton ?? const EdgeInsetsDirectional.only(bottom: 16, start: 16, end: 16),
padding: _marginButton
?? const EdgeInsetsDirectional.only(top: 16, end: 8),
child: Row(
children: [
if (_cancelText.isNotEmpty)
Expanded(child: ConfirmDialogButton(
label: _cancelText,
backgroundColor: _colorCancelButton,
borderRadius: _radiusButton,
textStyle: _styleTextCancelButton,
padding: _paddingButton,
maxLines: titleActionButtonMaxLines,
onTapAction: _onCancelButtonAction)),
if (_confirmText.isNotEmpty && _cancelText.isNotEmpty) const SizedBox(width: 8),
if (_confirmText.isNotEmpty)
Expanded(child: ConfirmDialogButton(
label: _confirmText,
backgroundColor: _colorConfirmButton,
borderRadius: _radiusButton,
textStyle: _styleTextConfirmButton,
padding: _paddingButton,
maxLines: titleActionButtonMaxLines,
onTapAction: _onConfirmButtonAction,))
]
))
]
)
children: [
if (_cancelText.isNotEmpty)
Expanded(child: ConfirmDialogButton(
label: _cancelText,
backgroundColor: _colorCancelButton ?? AppColor.blue700,
borderRadius: _radiusButton,
textStyle: _styleTextCancelButton ?? const TextStyle(
fontSize: 17,
height: 24 / 17,
fontWeight: FontWeight.w500,
color: Colors.white,
),
padding: _paddingButton,
maxLines: titleActionButtonMaxLines,
onTapAction: _onCancelButtonAction,
)),
if (_confirmText.isNotEmpty && _cancelText.isNotEmpty)
const SizedBox(width: 16),
if (_confirmText.isNotEmpty)
Expanded(child: ConfirmDialogButton(
label: _confirmText,
backgroundColor: _colorConfirmButton ?? AppColor.colorF3F6F9,
borderRadius: _radiusButton,
textStyle: _styleTextConfirmButton ?? const TextStyle(
fontSize: 17,
height: 24 / 17,
fontWeight: FontWeight.w500,
color: AppColor.steelGray600,
),
padding: _paddingButton,
maxLines: titleActionButtonMaxLines,
onTapAction: _onConfirmButtonAction,
))
],
),
)
],
),
);
}
}
-1
View File
@@ -241,7 +241,6 @@ abstract class BaseController extends GetxController
alignCenter: true,
outsideDismissible: false,
titleActionButtonMaxLines: 1,
marginIcon: EdgeInsetsDirectional.zero,
icon: SvgPicture.asset(imagePaths.icTMailLogo, width: 64, height: 64),
onConfirmAction: _performSaveAndReconnection,
onCancelAction: _performReconnection,
@@ -8,7 +8,6 @@ import 'package:core/presentation/views/modal_sheets/edit_text_modal_sheet_build
import 'package:core/utils/app_logger.dart';
import 'package:core/utils/platform_info.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
@@ -437,17 +436,10 @@ abstract class BaseMailboxController extends BaseController {
} else {
Get.dialog(
PointerInterceptor(
child: (ConfirmDialogBuilder(imagePaths)
child: (ConfirmDialogBuilder(imagePaths, useIconAsBasicLogo: true)
..key(const Key('confirm_dialog_delete_mailbox'))
..title(AppLocalizations.of(context).deleteFolders)
..content(AppLocalizations.of(context).message_confirmation_dialog_delete_folder(presentationMailbox.getDisplayName(context)))
..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, fit: BoxFit.fill))
..colorConfirmButton(AppColor.colorConfirmActionDialog)
..styleTextConfirmButton(const TextStyle(
fontSize: 17,
fontWeight: FontWeight.w500,
color: AppColor.colorActionDeleteConfirmDialog
))
..onCloseButtonAction(() => popBack())
..onConfirmButtonAction(AppLocalizations.of(context).delete, () => onDeleteMailboxAction(presentationMailbox))
..onCancelButtonAction(AppLocalizations.of(context).cancel, () => popBack())
@@ -19,12 +19,6 @@ mixin LogoutMixin implements MessageDialogActionMixin {
alignCenter: true,
outsideDismissible: false,
titleActionButtonMaxLines: 1,
titlePadding: const EdgeInsetsDirectional.only(
start: 24,
top: 24,
end: 24,
bottom: 12,
),
messageStyle: const TextStyle(
color: AppColor.colorTextBody,
fontSize: 15,
@@ -6,7 +6,6 @@ import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/presentation/views/bottom_popup/confirmation_dialog_action_sheet_builder.dart';
import 'package:core/presentation/views/dialog/confirmation_dialog_builder.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:model/extensions/presentation_mailbox_extension.dart';
import 'package:model/mailbox/presentation_mailbox.dart';
@@ -78,16 +77,10 @@ mixin MailboxActionHandlerMixin {
.show();
} else {
Get.dialog(
PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths)
PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths, useIconAsBasicLogo: true)
..key(const Key('confirm_dialog_empty_trash'))
..title(AppLocalizations.of(context).emptyTrash)
..content(AppLocalizations.of(context).empty_trash_dialog_message)
..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, fit: BoxFit.fill))
..colorConfirmButton(AppColor.colorConfirmActionDialog)
..styleTextConfirmButton(const TextStyle(
fontSize: 17,
fontWeight: FontWeight.w500,
color: AppColor.colorActionDeleteConfirmDialog))
..onCloseButtonAction(popBack)
..onConfirmButtonAction(AppLocalizations.of(context).delete, () {
popBack();
@@ -142,16 +135,10 @@ mixin MailboxActionHandlerMixin {
.show();
} else {
Get.dialog(
PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths)
PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths, useIconAsBasicLogo: true)
..key(const Key('confirm_dialog_empty_spam'))
..title(AppLocalizations.of(context).emptySpamFolder)
..content(AppLocalizations.of(context).emptySpamMessageDialog)
..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, fit: BoxFit.fill))
..colorConfirmButton(AppColor.colorConfirmActionDialog)
..styleTextConfirmButton(const TextStyle(
fontSize: 17,
fontWeight: FontWeight.w500,
color: AppColor.colorActionDeleteConfirmDialog))
..onCloseButtonAction(popBack)
..onConfirmButtonAction(AppLocalizations.of(context).delete_all, () {
popBack();
@@ -38,41 +38,42 @@ mixin MessageDialogActionMixin {
PopInvokedWithResultCallback? onPopInvoked,
bool isArrangeActionButtonsVertical = false,
int? titleActionButtonMaxLines,
EdgeInsetsGeometry? titlePadding,
bool useIconAsBasicLogo = false,
}
) async {
final responsiveUtils = Get.find<ResponsiveUtils>();
final imagePaths = Get.find<ImagePaths>();
final paddingTitle = titlePadding ??
(icon != null
? const EdgeInsetsDirectional.only(top: 24, start: 24, end: 24)
: const EdgeInsetsDirectional.symmetric(horizontal: 24));
if (alignCenter) {
final childWidget = PointerInterceptor(
child: (ConfirmDialogBuilder(
imagePaths,
listTextSpan: listTextSpan,
titleActionButtonMaxLines: titleActionButtonMaxLines,
isArrangeActionButtonsVertical: isArrangeActionButtonsVertical
isArrangeActionButtonsVertical: isArrangeActionButtonsVertical,
useIconAsBasicLogo: useIconAsBasicLogo,
)
..key(key)
..title(title ?? '')
..content(message)
..addIcon(icon)
..colorConfirmButton(actionButtonColor ?? AppColor.colorTextButton)
..colorCancelButton(cancelButtonColor ?? AppColor.colorCancelButton)
..marginIcon(icon != null ? (marginIcon ?? const EdgeInsets.only(top: 24)) : null)
..paddingTitle(paddingTitle)
..colorConfirmButton(actionButtonColor ?? AppColor.blue700)
..colorCancelButton(cancelButtonColor ?? AppColor.colorF3F6F9)
..radiusButton(12)
..paddingButton(paddingButton)
..paddingContent(const EdgeInsets.only(left: 24, right: 24, bottom: 24, top: 12))
..marginButton(hasCancelButton ? null : const EdgeInsets.only(bottom: 24, left: 24, right: 24))
..styleTitle(titleStyle ?? const TextStyle(fontSize: 20, fontWeight: FontWeight.bold, color: Colors.black))
..styleContent(messageStyle ?? const TextStyle(fontSize: 14, fontWeight: FontWeight.normal, color: AppColor.colorContentEmail))
..styleTextCancelButton(cancelStyle ?? const TextStyle(fontSize: 17, fontWeight: FontWeight.w500, color: AppColor.colorTextButton))
..styleTextConfirmButton(actionStyle ?? const TextStyle(fontSize: 17, fontWeight: FontWeight.w500, color: Colors.white))
..styleTitle(titleStyle)
..styleContent(messageStyle)
..styleTextCancelButton(cancelStyle ?? const TextStyle(
fontSize: 17,
height: 24 / 17,
fontWeight: FontWeight.w500,
color: AppColor.steelGray600,
))
..styleTextConfirmButton(actionStyle ?? const TextStyle(
fontSize: 17,
height: 24 / 17,
fontWeight: FontWeight.w500,
color: Colors.white,
))
..onConfirmButtonAction(actionName, () {
if (autoPerformPopBack) {
popBack();
@@ -107,25 +108,30 @@ mixin MessageDialogActionMixin {
listTextSpan: listTextSpan,
maxWith: responsiveUtils.getSizeScreenShortestSide(context) - 16,
titleActionButtonMaxLines: titleActionButtonMaxLines,
isArrangeActionButtonsVertical: isArrangeActionButtonsVertical
isArrangeActionButtonsVertical: isArrangeActionButtonsVertical,
useIconAsBasicLogo: useIconAsBasicLogo,
)
..key(key)
..title(title ?? '')
..content(message)
..addIcon(icon)
..paddingButton(paddingButton)
..margin(const EdgeInsets.only(bottom: 42))
..widthDialog(responsiveUtils.getSizeScreenWidth(context))
..colorConfirmButton(actionButtonColor ?? AppColor.colorTextButton)
..colorCancelButton(cancelButtonColor ?? AppColor.colorCancelButton)
..paddingTitle(paddingTitle)
..marginIcon(EdgeInsets.zero)
..paddingContent(const EdgeInsets.only(left: 44, right: 44, bottom: 24, top: 12))
..marginButton(hasCancelButton ? null : const EdgeInsets.only(bottom: 16, left: 44, right: 44))
..styleTitle(titleStyle ?? const TextStyle(fontSize: 20, fontWeight: FontWeight.bold, color: Colors.black))
..styleContent(messageStyle ?? const TextStyle(fontSize: 14, fontWeight: FontWeight.normal, color: AppColor.colorContentEmail))
..styleTextCancelButton(cancelStyle ?? const TextStyle(fontSize: 17, fontWeight: FontWeight.w500, color: AppColor.colorTextButton))
..styleTextConfirmButton(actionStyle ?? const TextStyle(fontSize: 17, fontWeight: FontWeight.w500, color: Colors.white))
..colorConfirmButton(actionButtonColor ?? AppColor.blue700)
..colorCancelButton(cancelButtonColor ?? AppColor.colorF3F6F9)
..styleTitle(titleStyle)
..styleContent(messageStyle)
..styleTextCancelButton(cancelStyle ?? const TextStyle(
fontSize: 17,
height: 24 / 17,
fontWeight: FontWeight.w500,
color: AppColor.steelGray600,
))
..styleTextConfirmButton(actionStyle ?? const TextStyle(
fontSize: 17,
height: 24 / 17,
fontWeight: FontWeight.w500,
color: Colors.white,
))
..onConfirmButtonAction(actionName, () {
if (autoPerformPopBack) {
popBack();
@@ -185,24 +191,29 @@ mixin MessageDialogActionMixin {
imagePaths,
listTextSpan: listTextSpan,
titleActionButtonMaxLines: titleActionButtonMaxLines,
isArrangeActionButtonsVertical: isArrangeActionButtonsVertical
isArrangeActionButtonsVertical: isArrangeActionButtonsVertical,
useIconAsBasicLogo: useIconAsBasicLogo,
)
..key(key)
..title(title ?? '')
..content(message)
..addIcon(icon)
..paddingButton(paddingButton)
..colorConfirmButton(actionButtonColor ?? AppColor.colorTextButton)
..colorCancelButton(cancelButtonColor ?? AppColor.colorCancelButton)
..marginIcon(icon != null ? const EdgeInsets.only(top: 24) : null)
..paddingTitle(paddingTitle)
..marginIcon(EdgeInsets.zero)
..paddingContent(const EdgeInsets.only(left: 44, right: 44, bottom: 24, top: 12))
..marginButton(hasCancelButton ? null : const EdgeInsets.only(bottom: 16, left: 44, right: 44))
..styleTitle(titleStyle ?? const TextStyle(fontSize: 20, fontWeight: FontWeight.bold, color: Colors.black))
..styleContent(messageStyle ?? const TextStyle(fontSize: 14, fontWeight: FontWeight.normal, color: AppColor.colorContentEmail))
..styleTextCancelButton(cancelStyle ?? const TextStyle(fontSize: 17, fontWeight: FontWeight.w500, color: AppColor.colorTextButton))
..styleTextConfirmButton(actionStyle ?? const TextStyle(fontSize: 17, fontWeight: FontWeight.w500, color: Colors.white))
..colorConfirmButton(actionButtonColor ?? AppColor.blue700)
..colorCancelButton(cancelButtonColor ?? AppColor.colorF3F6F9)
..styleTitle(titleStyle)
..styleContent(messageStyle)
..styleTextCancelButton(cancelStyle ?? const TextStyle(
fontSize: 17,
height: 24 / 17,
fontWeight: FontWeight.w500,
color: AppColor.steelGray600,
))
..styleTextConfirmButton(actionStyle ?? const TextStyle(
fontSize: 17,
height: 24 / 17,
fontWeight: FontWeight.w500,
color: Colors.white,
))
..onConfirmButtonAction(actionName, () {
if (autoPerformPopBack) {
popBack();
@@ -2258,7 +2258,6 @@ class ComposerController extends BaseController
_autoFocusFieldWhenLauncher();
}
},
marginIcon: EdgeInsets.zero,
icon: SvgPicture.asset(
imagePaths.icQuotasWarning,
width: 40,
@@ -1492,13 +1492,10 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
.show();
} else {
Get.dialog(
PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths)
PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths, useIconAsBasicLogo: true)
..key(const Key('confirm_dialog_delete_email_permanently'))
..title(DeleteActionType.single.getTitleDialog(context))
..content(DeleteActionType.single.getContentDialog(context))
..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, fit: BoxFit.fill))
..colorConfirmButton(AppColor.colorConfirmActionDialog)
..styleTextConfirmButton(const TextStyle(fontSize: 17, fontWeight: FontWeight.w500, color: AppColor.colorActionDeleteConfirmDialog))
..onCloseButtonAction(() => popBack())
..onConfirmButtonAction(DeleteActionType.single.getConfirmActionName(context), () => _deleteEmailPermanentlyAction(context, email))
..onCancelButtonAction(AppLocalizations.of(context).cancel, () => popBack()))
@@ -1069,16 +1069,10 @@ class MailboxController extends BaseMailboxController
.show();
} else {
Get.dialog(
PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths)
PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths, useIconAsBasicLogo: true)
..key(const Key('confirm_dialog_delete_multiple_mailbox'))
..title(AppLocalizations.of(context).deleteFolders)
..content(AppLocalizations.of(context).messageConfirmationDialogDeleteMultipleFolder(selectedMailboxList.length))
..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, fit: BoxFit.fill))
..colorConfirmButton(AppColor.colorConfirmActionDialog)
..styleTextConfirmButton(const TextStyle(
fontSize: 17,
fontWeight: FontWeight.w500,
color: AppColor.colorActionDeleteConfirmDialog))
..onCloseButtonAction(() => popBack())
..onConfirmButtonAction(AppLocalizations.of(context).delete, () =>
_deleteMultipleMailboxAction(selectedMailboxList))
@@ -1711,23 +1705,16 @@ class MailboxController extends BaseMailboxController
} else {
Get.dialog(
PointerInterceptor(
child: (ConfirmDialogBuilder(imagePaths)
child: (ConfirmDialogBuilder(imagePaths, useIconAsBasicLogo: true)
..key(const Key('confirm_dialog_subaddressing'))
..title(AppLocalizations.of(context).allowSubaddressing)
..styleTitle(const TextStyle(
fontSize: 17,
fontWeight: FontWeight.w500,
color: AppColor.colorTextButton
))
..content(AppLocalizations.of(context).message_confirmation_dialog_allow_subaddressing(mailboxName))
..addIcon(SvgPicture.asset(imagePaths.icSubaddressingAllow, width: 64, height: 64))
..addWidgetContent(CopySubaddressWidget(
context: context,
imagePath: imagePaths,
subaddress: subaddress,
onCopyButtonAction: () => copySubaddressAction(context, subaddress),
))
..colorCancelButton(AppColor.colorContentEmail)
..onCloseButtonAction(() => popBack())
..onConfirmButtonAction(AppLocalizations.of(context).allow, () => onAllowSubaddressingAction(mailboxId, currentRights, MailboxActions.allowSubaddressing))
..onCancelButtonAction(AppLocalizations.of(context).cancel, () => popBack())
@@ -23,28 +23,26 @@ class CopySubaddressWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 24),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
child: Text(
subaddress,
style: const TextStyle(fontSize: 17.0, color: AppColor.colorMessageDialog),
),
return Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Flexible(
child: Text(
subaddress,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: const TextStyle(fontSize: 17.0, color: AppColor.colorMessageDialog),
),
TMailButtonWidget.fromIcon(
icon: imagePath.icCopy,
iconSize: 30,
padding: const EdgeInsets.all(3),
backgroundColor: Colors.transparent,
margin: const EdgeInsetsDirectional.only(top: 16, end: 16),
onTapActionCallback: onCopyButtonAction
)
],
),
),
TMailButtonWidget.fromIcon(
icon: imagePath.icCopy,
iconSize: 30,
padding: const EdgeInsets.all(5),
backgroundColor: Colors.transparent,
onTapActionCallback: onCopyButtonAction,
)
],
);
}
}
@@ -1552,19 +1552,13 @@ class MailboxDashBoardController extends ReloadableController
.show();
} else {
Get.dialog(
PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths)
PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths, useIconAsBasicLogo: true)
..key(const Key('confirm_dialog_delete_emails_permanently'))
..title(actionType.getTitleDialog(context))
..content(actionType.getContentDialog(
context,
count: listEmails?.length,
mailboxName: mailboxCurrent?.getDisplayName(context)))
..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, fit: BoxFit.fill))
..colorConfirmButton(AppColor.colorConfirmActionDialog)
..styleTextConfirmButton(const TextStyle(
fontSize: 17,
fontWeight: FontWeight.w500,
color: AppColor.colorActionDeleteConfirmDialog))
..onCloseButtonAction(() => popBack())
..onConfirmButtonAction(
actionType.getConfirmActionName(context),
@@ -2699,16 +2693,10 @@ class MailboxDashBoardController extends ReloadableController
.show();
} else {
Get.dialog(
PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths)
PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths, useIconAsBasicLogo: true)
..key(const Key('confirm_dialog_empty_spam'))
..title(AppLocalizations.of(context).emptySpamFolder)
..content(AppLocalizations.of(context).emptySpamMessageDialog)
..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, fit: BoxFit.fill))
..colorConfirmButton(AppColor.colorConfirmActionDialog)
..styleTextConfirmButton(const TextStyle(
fontSize: 17,
fontWeight: FontWeight.w500,
color: AppColor.colorActionDeleteConfirmDialog))
..onCloseButtonAction(popBack)
..onConfirmButtonAction(AppLocalizations.of(context).delete_all, () {
popBack();
@@ -79,7 +79,9 @@ class TopBarThreadSelection extends StatelessWidget{
icon: isAllEmailStarred
? imagePaths.icUnStar
: imagePaths.icStar,
iconColor: TopBarThreadSelectionStyle.iconColor,
iconColor: isAllEmailStarred
? TopBarThreadSelectionStyle.iconColor
: null,
tooltipMessage: isAllEmailStarred
? AppLocalizations.of(context).un_star
: AppLocalizations.of(context).star,
@@ -168,17 +168,9 @@ class EmailRulesController extends BaseController {
} else {
Get.dialog(
PointerInterceptor(
child: (ConfirmDialogBuilder(imagePaths)
child: (ConfirmDialogBuilder(imagePaths, useIconAsBasicLogo: true)
..title(AppLocalizations.of(context).deleteEmailRule)
..content(AppLocalizations.of(context).messageConfirmationDialogDeleteEmailRule(emailRule.name))
..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog,
fit: BoxFit.fill))
..marginIcon(EdgeInsets.zero)
..colorConfirmButton(AppColor.colorConfirmActionDialog)
..styleTextConfirmButton(const TextStyle(
fontSize: 17,
fontWeight: FontWeight.w500,
color: AppColor.colorActionDeleteConfirmDialog))
..onCloseButtonAction(() => popBack())
..onConfirmButtonAction(AppLocalizations.of(context).delete, () {
_handleDeleteEmailRuleAction(emailRule);
@@ -4,7 +4,6 @@ import 'package:core/presentation/state/success.dart';
import 'package:core/presentation/utils/keyboard_utils.dart';
import 'package:core/utils/app_logger.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:forward/forward/tmail_forward.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
@@ -115,27 +114,28 @@ class ForwardController extends BaseController {
}
void deleteRecipients(BuildContext context, String emailAddress) {
showConfirmDialogAction(context,
showConfirmDialogAction(
context,
title: AppLocalizations.of(context).deleteRecipient,
AppLocalizations.of(context).messageConfirmationDialogDeleteRecipientForward(emailAddress),
AppLocalizations.of(context).remove,
onConfirmAction: () => _handleDeleteRecipientAction({emailAddress}),
showAsBottomSheet: true,
icon: SvgPicture.asset(imagePaths.icDeleteDialogRecipients, fit: BoxFit.fill),
titleStyle: const TextStyle(
fontSize: 20,
fontWeight: FontWeight.w600,
color: AppColor.colorDeletePermanentlyButton),
useIconAsBasicLogo: true,
actionStyle: const TextStyle(
fontSize: 17,
height: 24 / 17,
fontWeight: FontWeight.w500,
color: Colors.white),
color: AppColor.steelGray600,
),
cancelStyle: const TextStyle(
fontSize: 17,
height: 24 / 17,
fontWeight: FontWeight.w500,
color: AppColor.colorTextButton),
actionButtonColor: AppColor.colorDeletePermanentlyButton,
cancelButtonColor: AppColor.colorButtonCancelDialog,
color: Colors.white,
),
actionButtonColor: AppColor.colorF3F6F9,
cancelButtonColor: AppColor.blue700,
);
}
@@ -217,21 +217,21 @@ class ForwardController extends BaseController {
AppLocalizations.of(currentContext!).remove,
onConfirmAction: () => _handleDeleteRecipientAction(listEmailAddress),
showAsBottomSheet: true,
icon: SvgPicture.asset(imagePaths.icDeleteDialogRecipients, fit: BoxFit.fill),
titleStyle: const TextStyle(
fontSize: 20,
fontWeight: FontWeight.w600,
color: AppColor.colorDeletePermanentlyButton),
useIconAsBasicLogo: true,
actionStyle: const TextStyle(
fontSize: 17,
height: 24 / 17,
fontWeight: FontWeight.w500,
color: Colors.white),
color: AppColor.steelGray600,
),
cancelStyle: const TextStyle(
fontSize: 17,
height: 24 / 17,
fontWeight: FontWeight.w500,
color: AppColor.colorTextButton),
actionButtonColor: AppColor.colorDeletePermanentlyButton,
cancelButtonColor: AppColor.colorButtonCancelDialog,
color: Colors.white,
),
actionButtonColor: AppColor.colorF3F6F9,
cancelButtonColor: AppColor.blue700,
);
}
@@ -7,7 +7,6 @@ import 'package:core/utils/app_logger.dart';
import 'package:core/utils/platform_info.dart';
import 'package:dartz/dartz.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
@@ -313,19 +312,9 @@ class IdentitiesController extends ReloadableController implements BeforeReconne
void _deleteIdentityFailure(DeleteIdentityFailure failure) {
if (currentContext != null) {
Get.dialog(
(ConfirmDialogBuilder(imagePaths)
(ConfirmDialogBuilder(imagePaths, useIconAsBasicLogo: true)
..key(const Key('dialog_message_delete_identity_failed'))
..title(AppLocalizations.of(currentContext!).delete_failed)
..addIcon(SvgPicture.asset(imagePaths.icDeleteDialogFailed, fit: BoxFit.fill))
..marginIcon(EdgeInsets.zero)
..styleTitle(const TextStyle(fontSize: 20,
fontWeight: FontWeight.bold,
color: Colors.black))
..colorConfirmButton(AppColor.colorTextButton)
..paddingTitle(const EdgeInsets.symmetric(vertical: 12))
..styleTextConfirmButton(const TextStyle(fontSize: 17,
fontWeight: FontWeight.w500,
color: Colors.white))
..onCloseButtonAction(() => popBack())
..onConfirmButtonAction('${AppLocalizations.of(currentContext!).got_it}!', () => popBack()))
.build(),
@@ -1,6 +1,5 @@
import 'package:core/core.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:pointer_interceptor/pointer_interceptor.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
@@ -41,37 +40,11 @@ class DeleteIdentityDialogBuilder extends StatelessWidget {
}
ConfirmDialogBuilder _buildDeleteDialog(BuildContext context) {
return ConfirmDialogBuilder(imagePaths)
return ConfirmDialogBuilder(imagePaths, useIconAsBasicLogo: true)
..key(const Key('confirm_dialog_delete_identity'))
..title(AppLocalizations.of(context).delete_identity)
..styleTitle(const TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold,
color: AppColor.colorActionDeleteConfirmDialog))
..paddingTitle(const EdgeInsets.all(0.0))
..content(AppLocalizations.of(context).message_confirmation_dialog_delete_identity)
..styleContent(const TextStyle(
fontSize: 15,
fontWeight: FontWeight.normal,
color: AppColor.colorContentEmail))
..paddingContent(const EdgeInsets.symmetric(horizontal: 24.0, vertical: 24.0))
..addIcon(Padding(
padding: const EdgeInsets.symmetric(vertical: 24.0),
child: SvgPicture.asset(imagePaths.icDeleteDialogIdentity, fit: BoxFit.fill),
))
..marginIcon(EdgeInsets.zero)
..colorCancelButton(AppColor.colorButtonCancelDialog)
..styleTextCancelButton(const TextStyle(
fontSize: 17,
fontWeight: FontWeight.w500,
color: AppColor.colorTextButton))
..colorConfirmButton(AppColor.colorActionDeleteConfirmDialog)
..styleTextConfirmButton(const TextStyle(
fontSize: 17,
fontWeight: FontWeight.w500,
color: Colors.white))
..marginButton(const EdgeInsets.only(bottom: 24, left: 24, right: 24))
..backgroundColor(Colors.black26)
..onCloseButtonAction(popBack)
..onConfirmButtonAction(AppLocalizations.of(context).delete, () =>
onDeleteIdentityAction.call())
..onCancelButtonAction(AppLocalizations.of(context).cancel, () => popBack());
@@ -7,7 +7,6 @@ import 'package:core/presentation/views/dialog/confirmation_dialog_builder.dart'
import 'package:core/utils/app_logger.dart';
import 'package:core/utils/platform_info.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
@@ -238,17 +237,10 @@ mixin EmailActionController {
.show();
} else {
Get.dialog(
PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths)
PointerInterceptor(child: (ConfirmDialogBuilder(imagePaths, useIconAsBasicLogo: true)
..key(const Key('confirm_dialog_delete_email_permanently'))
..title(DeleteActionType.single.getTitleDialog(context))
..content(DeleteActionType.single.getContentDialog(context))
..addIcon(SvgPicture.asset(imagePaths.icRemoveDialog, fit: BoxFit.fill))
..colorConfirmButton(AppColor.colorConfirmActionDialog)
..styleTextConfirmButton(
const TextStyle(
fontSize: 17,
fontWeight: FontWeight.w500,
color: AppColor.colorActionDeleteConfirmDialog))
..onCloseButtonAction(() => popBack())
..onConfirmButtonAction(
DeleteActionType.single.getConfirmActionName(context),
@@ -128,7 +128,6 @@ mixin OpenAppDeepLinkHandlerMixin on MessageDialogActionMixin {
alignCenter: true,
outsideDismissible: false,
titleActionButtonMaxLines: 1,
titlePadding: const EdgeInsetsDirectional.only(start: 24, top: 24, end: 24, bottom: 12),
messageStyle: const TextStyle(
color: AppColor.colorTextBody,
fontSize: 15,