From f477c5b697937196c24f68a4584531668ac77319 Mon Sep 17 00:00:00 2001 From: DatDang Date: Tue, 4 Jun 2024 10:04:40 +0700 Subject: [PATCH] TF-2877 Create notification setting view --- .../manage_account_dashboard_controller.dart | 5 ++ .../settings/settings_first_level_view.dart | 15 ++++ .../menu/settings/settings_view.dart | 3 + .../presentation/model/account_menu_item.dart | 7 ++ .../notification/notification_view.dart | 69 +++++++++++++++++++ 5 files changed, 99 insertions(+) create mode 100644 lib/features/manage_account/presentation/notification/notification_view.dart diff --git a/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart b/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart index 1cc6b2404..acff137cb 100644 --- a/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart +++ b/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart @@ -29,6 +29,7 @@ import 'package:tmail_ui_user/features/manage_account/presentation/mailbox_visib import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/manage_account_arguments.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/settings_page_level.dart'; +import 'package:tmail_ui_user/features/manage_account/presentation/notification/bindings/notification_binding.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/profiles/profiles_bindings.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vacation_controller_bindings.dart'; import 'package:tmail_ui_user/main/error/capability_validator.dart'; @@ -189,6 +190,9 @@ class ManageAccountDashBoardController extends ReloadableController { case AccountMenuItem.mailboxVisibility: MailboxVisibilityBindings().dependencies(); break; + case AccountMenuItem.notification: + NotificationBinding().dependencies(); + break; case AccountMenuItem.vacation: case AccountMenuItem.none: break; @@ -295,6 +299,7 @@ class ManageAccountDashBoardController extends ReloadableController { clearInputFormView(); selectAccountMenuItem(AccountMenuItem.none); settingsPageLevel.value = SettingsPageLevel.universal; + NotificationBinding().close(); _replaceBrowserHistory(); } diff --git a/lib/features/manage_account/presentation/menu/settings/settings_first_level_view.dart b/lib/features/manage_account/presentation/menu/settings/settings_first_level_view.dart index fb145a020..c5de7de20 100644 --- a/lib/features/manage_account/presentation/menu/settings/settings_first_level_view.dart +++ b/lib/features/manage_account/presentation/menu/settings/settings_first_level_view.dart @@ -1,4 +1,5 @@ import 'package:core/presentation/extensions/color_extension.dart'; +import 'package:core/utils/platform_info.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/widgets/user_information_widget.dart'; @@ -138,6 +139,20 @@ class SettingsFirstLevelView extends GetWidget { AccountMenuItem.languageAndRegion.getIcon(controller.imagePaths), () => controller.selectSettings(AccountMenuItem.languageAndRegion) ), + if (PlatformInfo.isMobile) ...[ + Divider( + color: AppColor.colorDividerHorizontal, + height: 1, + indent: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils), + endIndent: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils) + ), + SettingFirstLevelTileBuilder( + AppLocalizations.of(context).notification, + controller.imagePaths.icNotification, + () => controller.selectSettings(AccountMenuItem.notification), + subtitle: AppLocalizations.of(context).allowsTwakeMailToNotifyYouWhenANewMessageArrivesOnYourPhone, + ) + ], Divider( color: AppColor.colorDividerHorizontal, height: 1, diff --git a/lib/features/manage_account/presentation/menu/settings/settings_view.dart b/lib/features/manage_account/presentation/menu/settings/settings_view.dart index a2f08b765..81b433ac0 100644 --- a/lib/features/manage_account/presentation/menu/settings/settings_view.dart +++ b/lib/features/manage_account/presentation/menu/settings/settings_view.dart @@ -19,6 +19,7 @@ import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings_utils.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/settings_page_level.dart'; +import 'package:tmail_ui_user/features/manage_account/presentation/notification/notification_view.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/profiles/profiles_view.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vacation_view.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/vacation/widgets/vacation_notification_message_widget.dart'; @@ -228,6 +229,8 @@ class SettingsView extends GetWidget { } case AccountMenuItem.mailboxVisibility: return MailboxVisibilityView(); + case AccountMenuItem.notification: + return const NotificationView(); default: return const SizedBox.shrink(); } diff --git a/lib/features/manage_account/presentation/model/account_menu_item.dart b/lib/features/manage_account/presentation/model/account_menu_item.dart index 03951ac84..e0915ee4f 100644 --- a/lib/features/manage_account/presentation/model/account_menu_item.dart +++ b/lib/features/manage_account/presentation/model/account_menu_item.dart @@ -11,6 +11,7 @@ enum AccountMenuItem { forward, vacation, mailboxVisibility, + notification, none; String getIcon(ImagePaths imagePaths) { @@ -29,6 +30,8 @@ enum AccountMenuItem { return imagePaths.icVacation; case AccountMenuItem.mailboxVisibility: return imagePaths.icMailboxVisibility; + case AccountMenuItem.notification: + return imagePaths.icNotification; case AccountMenuItem.none: return imagePaths.icProfiles; } @@ -50,6 +53,8 @@ enum AccountMenuItem { return AppLocalizations.of(context).vacation; case AccountMenuItem.mailboxVisibility: return AppLocalizations.of(context).folderVisibility; + case AccountMenuItem.notification: + return AppLocalizations.of(context).notification; case AccountMenuItem.none: return AppLocalizations.of(context).profiles; } @@ -71,6 +76,8 @@ enum AccountMenuItem { return 'vacation'; case AccountMenuItem.mailboxVisibility: return 'folder-visibility'; + case AccountMenuItem.notification: + return 'notification'; case AccountMenuItem.none: return 'profiles'; } diff --git a/lib/features/manage_account/presentation/notification/notification_view.dart b/lib/features/manage_account/presentation/notification/notification_view.dart new file mode 100644 index 000000000..a71b414ae --- /dev/null +++ b/lib/features/manage_account/presentation/notification/notification_view.dart @@ -0,0 +1,69 @@ +import 'package:core/presentation/extensions/color_extension.dart'; +import 'package:core/presentation/resources/image_paths.dart'; +import 'package:core/presentation/utils/responsive_utils.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:get/get.dart'; +import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings_utils.dart'; +import 'package:tmail_ui_user/features/manage_account/presentation/notification/notification_controller.dart'; +import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; + +class NotificationView extends GetWidget { + const NotificationView({super.key}); + + @override + Widget build(BuildContext context) { + return Container( + color: SettingsUtils.getBackgroundColor(context, Get.find()), + padding: SettingsUtils.getMarginViewForSettingDetails(context, Get.find()), + child: Obx(() { + if (controller.notificationSettingEnabled.value == null) { + return const SizedBox.shrink(); + } + + return Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const SizedBox(height: 10), + Text( + AppLocalizations.of(context).showNotifications, + style: const TextStyle( + fontSize: 17, + height: 22 / 17, + fontWeight: FontWeight.w500, + color: Colors.black)), + const SizedBox(height: 12), + Text( + AppLocalizations.of(context).allowsTwakeMailToNotifyYouWhenANewMessageArrivesOnYourPhone, + style: const TextStyle( + fontSize: 15, + height: 20 / 15, + color: AppColor.colorSettingExplanation), + ), + ], + ) + ), + const SizedBox(width: 12), + InkWell( + onTap: controller.toggleNotificationSetting, + child: Padding( + padding: const EdgeInsets.all(4), + child: SvgPicture.asset( + controller.notificationSettingEnabled.value! + ? Get.find().icSwitchOn + : Get.find().icSwitchOff, + fit: BoxFit.contain, + width: 52, + height: 32), + ), + ), + ], + ); + }), + ); + } +} \ No newline at end of file