Apply new style Preferences part in Settings

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-07-03 02:41:02 +07:00
committed by Dat H. Pham
parent 8c0a3bccfa
commit 561972bc0d
3 changed files with 71 additions and 46 deletions
@@ -3,9 +3,11 @@ import 'package:get/get.dart';
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart'; import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/base/setting_detail_view_builder.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/base/setting_detail_view_builder.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings_utils.dart'; 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/setting_option_type.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/setting_option_type.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/preferences/preferences_controller.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/preferences/preferences_controller.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/preferences/widgets/setting_option_item.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/preferences/widgets/setting_option_item.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/widgets/setting_header_widget.dart';
class PreferencesView extends GetWidget<PreferencesController> with AppLoaderMixin { class PreferencesView extends GetWidget<PreferencesController> with AppLoaderMixin {
const PreferencesView({super.key}); const PreferencesView({super.key});
@@ -41,30 +43,39 @@ class PreferencesView extends GetWidget<PreferencesController> with AppLoaderMix
controller.responsiveUtils, controller.responsiveUtils,
), ),
width: double.infinity, width: double.infinity,
padding: SettingsUtils.getPreferencesSettingPadding( padding: const EdgeInsets.symmetric(vertical: 30, horizontal: 22),
context, child: Column(
controller.responsiveUtils, crossAxisAlignment: CrossAxisAlignment.start,
), children: [
child: Obx(() { if (controller.responsiveUtils.isWebDesktop(context))
final settingOption = controller.settingOption.value; const SettingHeaderWidget(
menuItem: AccountMenuItem.preferences,
padding: EdgeInsets.only(bottom: 21),
),
Obx(() {
final settingOption = controller.settingOption.value;
if (settingOption == null) return const SizedBox.shrink(); if (settingOption == null) return const SizedBox.shrink();
final settingOptionList = SettingOptionType.values.toList(); final settingOptionList = SettingOptionType.values.toList();
return ListView.separated( return Expanded(
itemCount: settingOptionList.length, child: ListView.separated(
itemBuilder: (context, index) { itemCount: settingOptionList.length,
return SettingOptionItem( itemBuilder: (context, index) {
imagePaths: controller.imagePaths, return SettingOptionItem(
settingOption: settingOption, imagePaths: controller.imagePaths,
optionType: settingOptionList[index], settingOption: settingOption,
onTapSettingOptionAction: controller.updateStateSettingOption, optionType: settingOptionList[index],
onTapSettingOptionAction: controller.updateStateSettingOption,
);
},
separatorBuilder: (_, __) => const SizedBox(height: 60),
),
); );
}, }),
separatorBuilder: (_, __) => const SizedBox(height: 60), ],
); ),
}),
), ),
), ),
), ),
@@ -1,6 +1,6 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/constants/constants_ui.dart';
import 'package:core/presentation/resources/image_paths.dart'; import 'package:core/presentation/resources/image_paths.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:server_settings/server_settings/tmail_server_settings.dart'; import 'package:server_settings/server_settings/tmail_server_settings.dart';
@@ -34,20 +34,22 @@ class SettingOptionItem extends StatelessWidget {
children: [ children: [
Text( Text(
optionType.getTitle(appLocalizations), optionType.getTitle(appLocalizations),
style: const TextStyle( style: ThemeUtils.textStyleInter600().copyWith(
fontFamily: ConstantsUI.fontApp, fontSize: 14,
fontSize: 15, height: 20 / 14,
height: 20 / 15, letterSpacing: 0.25,
fontWeight: FontWeight.bold, color: AppColor.gray424244,
color: Colors.black,
), ),
), ),
Padding( Padding(
padding: const EdgeInsets.symmetric(vertical: 24), padding: const EdgeInsets.symmetric(vertical: 8),
child: Text( child: Text(
optionType.getExplanation(appLocalizations), optionType.getExplanation(appLocalizations),
style: Theme.of(context).textTheme.bodySmall?.copyWith( style: ThemeUtils.textStyleInter400.copyWith(
color: Colors.black, fontSize: 14,
height: 21.01 / 14,
letterSpacing: -0.15,
color: AppColor.gray424244.withOpacity(0.64),
), ),
), ),
), ),
@@ -71,7 +73,7 @@ class SettingOptionItem extends StatelessWidget {
Expanded( Expanded(
child: Text( child: Text(
optionType.getToggleDescription(appLocalizations), optionType.getToggleDescription(appLocalizations),
style: Theme.of(context).textTheme.bodySmall?.copyWith( style: ThemeUtils.textStyleBodyBody2().copyWith(
color: Colors.black, color: Colors.black,
), ),
), ),
@@ -17,22 +17,34 @@ class SettingHeaderWidget extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final appLocalizations = AppLocalizations.of(context); final appLocalizations = AppLocalizations.of(context);
return Padding(
padding: padding ?? const EdgeInsets.all(16), final children = [
child: Column( Text(
crossAxisAlignment: CrossAxisAlignment.start, menuItem.getName(appLocalizations),
children: [ style: ThemeUtils.textStyleInter600().copyWith(
Text( color: Colors.black,
menuItem.getName(appLocalizations), ),
style: ThemeUtils.textStyleHeadingH6(color: Colors.black), ),
), if (menuItem.getExplanation(appLocalizations).isNotEmpty)
const SizedBox(height: 8), Padding(
Text( padding: const EdgeInsets.only(top: 8),
child: Text(
menuItem.getExplanation(appLocalizations), menuItem.getExplanation(appLocalizations),
style: ThemeUtils.textStyleBodyBody1(color: AppColor.steelGray400), style: ThemeUtils.textStyleBodyBody1(color: AppColor.steelGray400),
), ),
], ),
), ];
final child = children.length == 1
? children.first
: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: children,
);
return Padding(
padding: padding ?? const EdgeInsets.all(16),
child: child,
); );
} }
} }