diff --git a/core/lib/presentation/views/dialog/confirmation_dialog_builder.dart b/core/lib/presentation/views/dialog/confirmation_dialog_builder.dart index 2332e8274..e35ff3698 100644 --- a/core/lib/presentation/views/dialog/confirmation_dialog_builder.dart +++ b/core/lib/presentation/views/dialog/confirmation_dialog_builder.dart @@ -26,9 +26,13 @@ class ConfirmDialogBuilder { EdgeInsets? _paddingTitle; EdgeInsets? _paddingContent; EdgeInsets? _paddingButton; + EdgeInsets? _outsideDialogPadding; EdgeInsets? _marginIcon; EdgeInsets? _margin; double? _widthDialog; + double? _heightDialog; + Alignment? _alignment; + Color? _backgroundColor; bool showAsBottomSheet; OnConfirmButtonAction? _onConfirmButtonAction; @@ -108,6 +112,22 @@ class ConfirmDialogBuilder { _widthDialog = value; } + void heightDialog(double? value) { + _heightDialog = value; + } + + void aligment(Alignment? alignment) { + _alignment = alignment; + } + + void outsideDialogPadding(EdgeInsets? value) { + _outsideDialogPadding = value; + } + + void backgroundColor(Color value) { + _backgroundColor = value; + } + void onConfirmButtonAction(String confirmText, OnConfirmButtonAction? onConfirmButtonAction) { _confirmText = confirmText; _onConfirmButtonAction = onConfirmButtonAction; @@ -130,9 +150,11 @@ class ConfirmDialogBuilder { key: _key, shape: const RoundedRectangleBorder( borderRadius: BorderRadius.all(Radius.circular(16))), - insetPadding: const EdgeInsets.symmetric( + insetPadding: _outsideDialogPadding ?? const EdgeInsets.symmetric( horizontal: 24.0, vertical: 16.0), + alignment: _alignment ?? Alignment.center, + backgroundColor: _backgroundColor, child: _bodyContent(), ); } @@ -141,6 +163,7 @@ class ConfirmDialogBuilder { Widget _bodyContent() { return Container( width: _widthDialog ?? 400, + height: _heightDialog, decoration: const BoxDecoration( color: Colors.white, borderRadius: const BorderRadius.all(Radius.circular(16))), diff --git a/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart b/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart index eba6fd80b..6304a31e3 100644 --- a/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart +++ b/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart @@ -1,10 +1,8 @@ -import 'package:core/presentation/extensions/capitalize_extension.dart'; import 'package:core/presentation/extensions/color_extension.dart'; import 'package:core/presentation/resources/image_paths.dart'; import 'package:core/presentation/utils/app_toast.dart'; 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:core/utils/build_utils.dart'; import 'package:flutter/material.dart'; @@ -32,6 +30,7 @@ import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_id import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/identity_action_type.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/settings_page_level.dart'; +import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/widgets/delete_identity_dialog_builder.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; @@ -231,49 +230,14 @@ class IdentitiesController extends BaseController { } void openConfirmationDialogDeleteIdentityAction(BuildContext context, Identity identity) { - if (_responsiveUtils.isScreenWithShortestSide(context)) { - (ConfirmationDialogActionSheetBuilder(context) - ..messageText(AppLocalizations.of(context).message_confirmation_dialog_delete_identity) - ..onCancelAction(AppLocalizations.of(context).cancel, () => - popBack()) - ..onConfirmAction(AppLocalizations.of(context).delete, () => - _deleteIdentityAction(identity))) - .show(); - } else { - showDialog( - context: context, - barrierColor: AppColor.colorDefaultCupertinoActionSheet, - builder: (BuildContext context) => (ConfirmDialogBuilder(_imagePaths) - ..key(const Key('confirm_dialog_delete_identity')) - ..title(AppLocalizations.of(context).delete_identity.capitalizeFirstEach) - ..content(AppLocalizations.of(context).message_confirmation_dialog_delete_identity) - ..addIcon(SvgPicture.asset(_imagePaths.icDeleteDialogIdentity, fit: BoxFit.fill)) - ..marginIcon(EdgeInsets.zero) - ..styleTitle(const TextStyle( - fontSize: 20, - fontWeight: FontWeight.bold, - color: AppColor.colorActionDeleteConfirmDialog)) - ..styleContent(const TextStyle( - fontSize: 14, - fontWeight: FontWeight.normal, - color: AppColor.colorContentEmail)) - ..colorCancelButton(AppColor.colorButtonCancelDialog) - ..colorConfirmButton(AppColor.colorActionDeleteConfirmDialog) - ..styleTextConfirmButton(const TextStyle( - fontSize: 17, - fontWeight: FontWeight.w500, - color: Colors.white)) - ..styleTextCancelButton(const TextStyle( - fontSize: 17, - fontWeight: FontWeight.w500, - color: AppColor.colorTextButton)) - ..onCloseButtonAction(() => popBack()) - ..onConfirmButtonAction(AppLocalizations.of(context).delete, () => - _deleteIdentityAction(identity)) - ..onCancelButtonAction(AppLocalizations.of(context).cancel, () => - popBack())) - .build()); - } + showDialog( + context: context, + barrierColor: AppColor.colorDefaultCupertinoActionSheet, + builder: (BuildContext context) => DeleteIdentityDialogBuilder( + responsiveUtils: _responsiveUtils, + imagePaths: _imagePaths, + onDeleteIdentityAction: () => _deleteIdentityAction(identity), + )); } void _deleteIdentityAction(Identity identity) { diff --git a/lib/features/manage_account/presentation/profiles/identities/widgets/delete_identity_dialog_builder.dart b/lib/features/manage_account/presentation/profiles/identities/widgets/delete_identity_dialog_builder.dart new file mode 100644 index 000000000..7bb6a1533 --- /dev/null +++ b/lib/features/manage_account/presentation/profiles/identities/widgets/delete_identity_dialog_builder.dart @@ -0,0 +1,75 @@ +import 'package:core/core.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; +import 'package:tmail_ui_user/main/routes/route_navigation.dart'; + +typedef OnDeleteIdentityAction = void Function(); + +class DeleteIdentityDialogBuilder extends StatelessWidget { + + final ResponsiveUtils responsiveUtils; + final ImagePaths imagePaths; + final OnDeleteIdentityAction onDeleteIdentityAction; + + const DeleteIdentityDialogBuilder({ + Key? key, + required this.responsiveUtils, + required this.imagePaths, + required this.onDeleteIdentityAction + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return ResponsiveWidget( + responsiveUtils: responsiveUtils, + mobile: (_buildDeleteDialog(context) + ..aligment(Alignment.bottomCenter) + ..outsideDialogPadding(const EdgeInsets.only(left: 0, right: 0, bottom: BuildUtils.isWeb ? 42 : 16)) + ..widthDialog(MediaQuery.of(context).size.width - 16) + ..heightDialog(280)) + .build(), + landscapeMobile: _buildDeleteDialog(context).build(), + tablet: _buildDeleteDialog(context).build(), + tabletLarge: _buildDeleteDialog(context).build(), + landscapeTablet: _buildDeleteDialog(context).build(), + desktop: _buildDeleteDialog(context).build()); + } + + ConfirmDialogBuilder _buildDeleteDialog(BuildContext context) { + return ConfirmDialogBuilder(imagePaths) + ..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)) + ..paddingButton(const EdgeInsets.only(bottom: 24, left: 24, right: 24)) + ..backgroundColor(Colors.black26) + ..onConfirmButtonAction(AppLocalizations.of(context).delete, () => + onDeleteIdentityAction.call()) + ..onCancelButtonAction(AppLocalizations.of(context).cancel, () => popBack()); + } +} \ No newline at end of file