TF-4193 Handle multi click to enable Label visibility feature

This commit is contained in:
dab246
2025-12-09 13:43:43 +07:00
committed by Dat H. Pham
parent d1cd9efbab
commit 10038a3836
23 changed files with 330 additions and 43 deletions
@@ -12,4 +12,8 @@ abstract class ManageAccountDataSource {
Future<PreferencesSetting> getLocalSettings();
Future<AIScribeConfig> getAiScribeConfigLocalSettings();
Future<bool> getLabelVisibility();
Future<void> saveLabelVisibility(bool visible);
}
@@ -4,6 +4,7 @@ import 'package:tmail_ui_user/features/manage_account/data/datasource/manage_acc
import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_manager.dart';
import 'package:tmail_ui_user/features/manage_account/data/local/preferences_setting_manager.dart';
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/ai_scribe_config.dart';
import 'package:tmail_ui_user/features/manage_account/data/local/setting_cache_manager.dart';
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/preferences_config.dart';
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/preferences_setting.dart';
import 'package:tmail_ui_user/features/manage_account/domain/model/preferences/spam_report_config.dart';
@@ -15,11 +16,13 @@ class ManageAccountDataSourceImpl extends ManageAccountDataSource {
final LanguageCacheManager _languageCacheManager;
final PreferencesSettingManager _preferencesSettingManager;
final SettingCacheManager _settingCacheManager;
final ExceptionThrower _exceptionThrower;
ManageAccountDataSourceImpl(
this._languageCacheManager,
this._preferencesSettingManager,
this._settingCacheManager,
this._exceptionThrower
);
@@ -71,4 +74,24 @@ class ManageAccountDataSourceImpl extends ManageAccountDataSource {
return await _preferencesSettingManager.getAIScribeConfig();
}).catchError(_exceptionThrower.throwException);
}
@override
Future<bool> getLabelVisibility() {
return Future.sync(() async {
return await _settingCacheManager.getLabelVisibility();
}).catchError((error, stackTrace) async {
await _exceptionThrower.throwException(error, stackTrace);
throw error;
});
}
@override
Future<void> saveLabelVisibility(bool visible) {
return Future.sync(() async {
return await _settingCacheManager.saveLabelVisibility(visible);
}).catchError((error, stackTrace) async {
await _exceptionThrower.throwException(error, stackTrace);
throw error;
});
}
}
@@ -0,0 +1,18 @@
import 'package:shared_preferences/shared_preferences.dart';
class SettingCacheManager {
static const String _labelVisibilitySettingKey = 'LABEL_VISIBILITY';
const SettingCacheManager(this._sharedPreferences);
final SharedPreferences _sharedPreferences;
Future<bool> getLabelVisibility() async {
await _sharedPreferences.reload();
return _sharedPreferences.getBool(_labelVisibilitySettingKey) ?? false;
}
Future<void> saveLabelVisibility(bool visible) async {
await _sharedPreferences.setBool(_labelVisibilitySettingKey, visible);
}
}
@@ -31,4 +31,14 @@ class ManageAccountRepositoryImpl extends ManageAccountRepository {
Future<AIScribeConfig> getAiScribeConfigLocalSettings() {
return dataSource.getAiScribeConfigLocalSettings();
}
@override
Future<bool> getLabelVisibility() {
return dataSource.getLabelVisibility();
}
@override
Future<void> saveLabelVisibility(bool visible) {
return dataSource.saveLabelVisibility(visible);
}
}
@@ -12,4 +12,8 @@ abstract class ManageAccountRepository {
Future<PreferencesSetting> getLocalSettings();
Future<AIScribeConfig> getAiScribeConfigLocalSettings();
Future<bool> getLabelVisibility();
Future<void> saveLabelVisibility(bool visible);
}
@@ -0,0 +1,17 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
class GettingLabelVisibility extends LoadingState {}
class GetLabelVisibilitySuccess extends UIState {
final bool visible;
GetLabelVisibilitySuccess(this.visible);
@override
List<Object?> get props => [...super.props, visible];
}
class GetLabelVisibilityFailure extends FeatureFailure {
GetLabelVisibilityFailure(dynamic exception) : super(exception: exception);
}
@@ -0,0 +1,10 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
class SavingLabelVisibility extends LoadingState {}
class SaveLabelVisibilitySuccess extends UIState {}
class SaveLabelVisibilityFailure extends FeatureFailure {
SaveLabelVisibilityFailure(dynamic exception) : super(exception: exception);
}
@@ -0,0 +1,23 @@
import 'dart:core';
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart';
import 'package:tmail_ui_user/features/manage_account/domain/state/get_label_visibility_state.dart';
class GetLabelVisibilityInteractor {
final ManageAccountRepository _manageAccountRepository;
GetLabelVisibilityInteractor(this._manageAccountRepository);
Stream<Either<Failure, Success>> execute() async* {
try {
yield Right(GettingLabelVisibility());
final visible = await _manageAccountRepository.getLabelVisibility();
yield Right(GetLabelVisibilitySuccess(visible));
} catch (exception) {
yield Left(GetLabelVisibilityFailure(exception));
}
}
}
@@ -0,0 +1,23 @@
import 'dart:core';
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart';
import 'package:tmail_ui_user/features/manage_account/domain/state/save_label_visibility_state.dart';
class SaveLabelVisibilityInteractor {
final ManageAccountRepository _manageAccountRepository;
SaveLabelVisibilityInteractor(this._manageAccountRepository);
Stream<Either<Failure, Success>> execute({bool visible = true}) async* {
try {
yield Right(SavingLabelVisibility());
await _manageAccountRepository.saveLabelVisibility(visible);
yield Right(SaveLabelVisibilitySuccess());
} catch (exception) {
yield Left(SaveLabelVisibilityFailure(exception));
}
}
}
@@ -4,8 +4,11 @@ import 'package:tmail_ui_user/features/manage_account/data/datasource/manage_acc
import 'package:tmail_ui_user/features/manage_account/data/datasource_impl/manage_account_datasource_impl.dart';
import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_manager.dart';
import 'package:tmail_ui_user/features/manage_account/data/local/preferences_setting_manager.dart';
import 'package:tmail_ui_user/features/manage_account/data/local/setting_cache_manager.dart';
import 'package:tmail_ui_user/features/manage_account/data/repository/manage_account_repository_impl.dart';
import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_label_visibility_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/save_label_visibility_interactor.dart';
import 'package:tmail_ui_user/main/exceptions/cache_exception_thrower.dart';
class SettingInteractorBindings extends InteractorsBindings {
@@ -22,13 +25,21 @@ class SettingInteractorBindings extends InteractorsBindings {
() => ManageAccountDataSourceImpl(
Get.find<LanguageCacheManager>(),
Get.find<PreferencesSettingManager>(),
Get.find<SettingCacheManager>(),
Get.find<CacheExceptionThrower>(),
),
);
}
@override
void bindingsInteractor() {}
void bindingsInteractor() {
Get.lazyPut(
() => SaveLabelVisibilityInteractor(Get.find<ManageAccountRepository>()),
);
Get.lazyPut(
() => GetLabelVisibilityInteractor(Get.find<ManageAccountRepository>()),
);
}
@override
void bindingsRepository() {
@@ -0,0 +1,46 @@
import 'package:labels/utils/labels_constants.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_label_visibility_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/save_label_visibility_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart';
import 'package:tmail_ui_user/main/error/capability_validator.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
extension HandleSetupLabelVisibilityInSettingExtension
on ManageAccountDashBoardController {
bool get isLabelCapabilitySupported {
if (accountId.value == null || sessionCurrent == null) return false;
return LabelsConstants.labelsCapability.isSupported(
sessionCurrent!,
accountId.value!,
);
}
void enableLabelVisibility() {
isLabelVisibility.value = true;
saveLabelVisibilityInteractor = getBinding<SaveLabelVisibilityInteractor>();
if (saveLabelVisibilityInteractor != null) {
consumeState(saveLabelVisibilityInteractor!.execute());
}
if (currentOverlayContext != null && currentContext != null) {
appToast.showToastSuccessMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).theLabelFeatureIsNowAvailable,
);
}
}
void setUpLabelVisibility() {
getLabelVisibilityInteractor = getBinding<GetLabelVisibilityInteractor>();
if (getLabelVisibilityInteractor != null) {
consumeState(getLabelVisibilityInteractor!.execute());
}
}
void handleGetLabelVisibilitySuccess(bool visible) {
isLabelVisibility.value = visible;
}
}
@@ -25,12 +25,16 @@ import 'package:tmail_ui_user/features/home/data/exceptions/session_exceptions.d
import 'package:tmail_ui_user/features/home/domain/extensions/session_extensions.dart';
import 'package:tmail_ui_user/features/manage_account/domain/state/export_trace_log_state.dart';
import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_vacation_state.dart';
import 'package:tmail_ui_user/features/manage_account/domain/state/get_label_visibility_state.dart';
import 'package:tmail_ui_user/features/manage_account/domain/state/update_vacation_state.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_vacation_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_label_visibility_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/save_label_visibility_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/update_vacation_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/action/dashboard_setting_action.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/bindings/email_rules_bindings.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/export_trace_log_extension.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/handle_setup_label_visibility_in_setting_extension.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/handle_vacation_response_extension.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/validate_setting_capability_supported_extension.dart';
@@ -64,6 +68,8 @@ class ManageAccountDashBoardController extends ReloadableController
UpdateVacationInteractor? _updateVacationInteractor;
PaywallController? paywallController;
GetQuotasInteractor? getQuotasInteractor;
SaveLabelVisibilityInteractor? saveLabelVisibilityInteractor;
GetLabelVisibilityInteractor? getLabelVisibilityInteractor;
final accountId = Rxn<AccountId>();
final accountMenuItemSelected = AccountMenuItem.profiles.obs;
@@ -71,6 +77,7 @@ class ManageAccountDashBoardController extends ReloadableController
final vacationResponse = Rxn<VacationResponse>();
final dashboardSettingAction = Rxn<UIAction>();
final octetsQuota = Rxn<Quota>();
final isLabelVisibility = RxBool(false);
Uri? previousUri;
AccountMenuItem? selectedMenu;
@@ -102,6 +109,8 @@ class ManageAccountDashBoardController extends ReloadableController
handleExportTraceLogSuccess(success);
} else if (success is GetQuotasSuccess) {
handleGetQuotasSuccess(success);
} else if (success is GetLabelVisibilitySuccess) {
handleGetLabelVisibilitySuccess(success.visible);
} else {
super.handleSuccessViewState(success);
}
@@ -177,6 +186,10 @@ class ManageAccountDashBoardController extends ReloadableController
} else if (isStorageCapabilitySupported) {
getQuotas(accountId.value);
}
if (isLabelCapabilitySupported) {
setUpLabelVisibility();
}
}
void _getParametersRouter() {
@@ -13,6 +13,7 @@ class SettingAppBar extends StatelessWidget {
final ResponsiveUtils responsiveUtils;
final VoidCallback onBackAction;
final VoidCallback? onExportTraceLogAction;
final VoidCallback? onMultiClickAction;
const SettingAppBar({
super.key,
@@ -22,6 +23,7 @@ class SettingAppBar extends StatelessWidget {
required this.responsiveUtils,
required this.onBackAction,
this.onExportTraceLogAction,
this.onMultiClickAction,
});
@override
@@ -39,6 +41,7 @@ class SettingAppBar extends StatelessWidget {
imagePaths: imagePaths,
responsiveUtils: responsiveUtils,
onBackAction: onBackAction,
onMultiClickAction: onMultiClickAction,
);
}
}
@@ -1,6 +1,7 @@
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/presentation/utils/theme_utils.dart';
import 'package:core/presentation/views/button/multi_click_widget.dart';
import 'package:core/presentation/views/button/tmail_button_widget.dart';
import 'package:flutter/material.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart';
@@ -11,6 +12,7 @@ class SettingFirstLevelAppBar extends StatelessWidget {
final ImagePaths imagePaths;
final ResponsiveUtils responsiveUtils;
final VoidCallback onBackAction;
final VoidCallback? onMultiClickAction;
const SettingFirstLevelAppBar({
super.key,
@@ -18,12 +20,27 @@ class SettingFirstLevelAppBar extends StatelessWidget {
required this.imagePaths,
required this.responsiveUtils,
required this.onBackAction,
this.onMultiClickAction,
});
@override
Widget build(BuildContext context) {
final appLocalizations = AppLocalizations.of(context);
Widget titleWidget = Text(
accountMenuItem.getName(appLocalizations),
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: ThemeUtils.textStyleM3BodyLarge,
);
if (onMultiClickAction != null) {
titleWidget = MultiClickWidget(
onMultiTap: onMultiClickAction!,
child: titleWidget,
);
}
return Container(
height: 64,
padding: _getPadding(context),
@@ -43,12 +60,7 @@ class SettingFirstLevelAppBar extends StatelessWidget {
Center(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 50),
child: Text(
accountMenuItem.getName(appLocalizations),
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: ThemeUtils.textStyleM3BodyLarge,
),
child: titleWidget,
),
),
],
@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/email_rules_view.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/handle_setup_label_visibility_in_setting_extension.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/validate_setting_capability_supported_extension.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/forward/forward_view.dart';
@@ -28,21 +29,37 @@ class SettingsView extends GetWidget<SettingsController> {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Obx(() => SettingAppBar(
pageLevel: controller
Obx(() {
final labelVisibility = controller
.manageAccountDashboardController
.settingsPageLevel
.value,
accountMenuItem: controller
.isLabelVisibility
.value;
final isLabelCapabilitySupported = controller
.manageAccountDashboardController
.accountMenuItemSelected
.value,
imagePaths: controller.imagePaths,
responsiveUtils: controller.responsiveUtils,
onBackAction: () => controller.onBackSettingAction(context),
onExportTraceLogAction: () =>
controller.showExportTraceLogConfirmDialog(context),
)),
.isLabelCapabilitySupported;
final disableMultiClick =
labelVisibility || !isLabelCapabilitySupported;
return SettingAppBar(
pageLevel: controller
.manageAccountDashboardController
.settingsPageLevel
.value,
accountMenuItem: controller
.manageAccountDashboardController
.accountMenuItemSelected
.value,
imagePaths: controller.imagePaths,
responsiveUtils: controller.responsiveUtils,
onBackAction: () => controller.onBackSettingAction(context),
onExportTraceLogAction: () =>
controller.showExportTraceLogConfirmDialog(context),
onMultiClickAction: disableMultiClick
? null
: controller.manageAccountDashboardController.enableLabelVisibility,
);
}),
Obx(() {
final dashboard = controller.manageAccountDashboardController;
final vacation = dashboard.vacationResponse.value;
@@ -13,18 +13,18 @@ class PreferencesBindings extends Bindings {
void dependencies() {
PreferencesInteractorsBindings().dependencies();
Get.lazyPut(() => PreferencesController(
Get.find<GetServerSettingInteractor>(),
Get.find<UpdateServerSettingInteractor>(),
Get.find<GetLocalSettingsInteractor>(),
Get.find<UpdateLocalSettingsInteractor>(),
));
Get.lazyPut(() => GetLocalSettingsInteractor(
Get.find<ManageAccountRepository>(),
));
Get.lazyPut(() => UpdateLocalSettingsInteractor(
Get.find<ManageAccountRepository>(),
));
Get.lazyPut(() => PreferencesController(
Get.find<GetServerSettingInteractor>(),
Get.find<UpdateServerSettingInteractor>(),
Get.find<GetLocalSettingsInteractor>(),
Get.find<UpdateLocalSettingsInteractor>(),
));
}
}
@@ -4,6 +4,7 @@ import 'package:tmail_ui_user/features/manage_account/data/datasource/manage_acc
import 'package:tmail_ui_user/features/manage_account/data/datasource_impl/manage_account_datasource_impl.dart';
import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_manager.dart';
import 'package:tmail_ui_user/features/manage_account/data/local/preferences_setting_manager.dart';
import 'package:tmail_ui_user/features/manage_account/data/local/setting_cache_manager.dart';
import 'package:tmail_ui_user/features/manage_account/data/repository/manage_account_repository_impl.dart';
import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/save_language_interactor.dart';
@@ -44,6 +45,7 @@ class PreferencesInteractorsBindings extends InteractorsBindings {
Get.lazyPut(() => ManageAccountDataSourceImpl(
Get.find<LanguageCacheManager>(),
Get.find<PreferencesSettingManager>(),
Get.find<SettingCacheManager>(),
Get.find<CacheExceptionThrower>(),
), tag: composerId);
}
@@ -48,7 +48,7 @@ class PreferencesController extends BaseController {
(failure) => false,
(success) => success is GettingServerSetting || success is UpdatingServerSetting);
final _manageAccountDashBoardController = Get.find<ManageAccountDashBoardController>();
final accountDashboardController = Get.find<ManageAccountDashBoardController>();
bool get isAICapabilitySupported {
return _manageAccountDashBoardController.isAICapabilitySupported;
@@ -128,7 +128,7 @@ class PreferencesController extends BaseController {
void _getSettingOption() {
consumeState(_getLocalSettingInteractor.execute());
final accountId = _manageAccountDashBoardController.accountId.value;
final accountId = accountDashboardController.accountId.value;
if (accountId != null) {
consumeState(_getServerSettingInteractor.execute(accountId));
} else {
@@ -196,8 +196,8 @@ class PreferencesController extends BaseController {
break;
}
final session = _manageAccountDashBoardController.sessionCurrent;
final accountId = _manageAccountDashBoardController.accountId.value;
final session = accountDashboardController.sessionCurrent;
final accountId = accountDashboardController.accountId.value;
if (session != null && accountId != null && newSettingOption != null) {
consumeState(
_updateServerSettingInteractor.execute(
@@ -215,7 +215,6 @@ class PreferencesController extends BaseController {
}
}
@override
void onClose() {
_appLifecycleListener?.dispose();
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:get/get.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/extensions/handle_setup_label_visibility_in_setting_extension.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/preferences_option_type.dart';
@@ -51,13 +52,34 @@ class PreferencesView extends GetWidget<PreferencesController> with AppLoaderMix
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (controller.responsiveUtils.isWebDesktop(context))
const SettingHeaderWidget(
menuItem: AccountMenuItem.preferences,
padding: EdgeInsets.only(bottom: 21),
Obx(
() {
final labelVisibility = controller
.accountDashboardController.isLabelVisibility.value;
final isLabelCapabilitySupported = controller
.accountDashboardController
.isLabelCapabilitySupported;
final disableMultiClick =
labelVisibility || !isLabelCapabilitySupported;
return SettingHeaderWidget(
menuItem: AccountMenuItem.preferences,
padding: const EdgeInsets.only(bottom: 21),
onMultiClickAction: disableMultiClick
? null
: controller.accountDashboardController
.enableLabelVisibility,
);
},
),
Obx(() {
final settingOption = controller.settingOption.value;
final localSettingOption = controller.localSettings.value;
final isLabelVisibility = controller
.accountDashboardController
.isLabelVisibility;
if (settingOption == null &&
localSettingOption.configs.isEmpty) {
@@ -75,12 +97,15 @@ class PreferencesView extends GetWidget<PreferencesController> with AppLoaderMix
...PreferencesOptionType.values.where(
(type) =>
type.isLocal &&
type != PreferencesOptionType.label &&
(type != PreferencesOptionType.aiScribe ||
controller.isAIScribeCapabilityAvailable),
),
if (settingOption != null &&
controller.isAICapabilitySupported)
PreferencesOptionType.aiNeedsAction,
if (isLabelVisibility.isTrue)
PreferencesOptionType.label,
];
return Expanded(
@@ -1,5 +1,6 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/utils/theme_utils.dart';
import 'package:core/presentation/views/button/multi_click_widget.dart';
import 'package:flutter/material.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
@@ -8,27 +9,38 @@ class SettingHeaderWidget extends StatelessWidget {
final AccountMenuItem menuItem;
final EdgeInsetsGeometry? padding;
final TextStyle? textStyle;
final VoidCallback? onMultiClickAction;
const SettingHeaderWidget({
Key? key,
required this.menuItem,
this.padding,
this.textStyle,
this.onMultiClickAction,
}) : super(key: key);
@override
Widget build(BuildContext context) {
final appLocalizations = AppLocalizations.of(context);
final children = [
Text(
menuItem.getName(appLocalizations),
style: textStyle ?? ThemeUtils.textStyleInter600().copyWith(
color: Colors.black,
),
maxLines: 1,
overflow: TextOverflow.ellipsis,
Widget titleWidget = Text(
menuItem.getName(appLocalizations),
style: textStyle ?? ThemeUtils.textStyleInter600().copyWith(
color: Colors.black,
),
maxLines: 1,
overflow: TextOverflow.ellipsis,
);
if (onMultiClickAction != null) {
titleWidget = MultiClickWidget(
onMultiTap: onMultiClickAction!,
child: titleWidget,
);
}
final children = [
titleWidget,
if (menuItem.getExplanation(appLocalizations).isNotEmpty)
Padding(
padding: const EdgeInsets.only(top: 13),
+6
View File
@@ -5283,5 +5283,11 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
},
"theLabelFeatureIsNowAvailable": "The label feature is now available.",
"@theLabelFeatureIsNowAvailable": {
"type": "text",
"placeholders_order": [],
"placeholders": {}
}
}
@@ -36,6 +36,7 @@ import 'package:tmail_ui_user/features/mailbox/data/local/state_cache_manager.da
import 'package:tmail_ui_user/features/mailbox_dashboard/data/local/local_sort_order_manager.dart';
import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_manager.dart';
import 'package:tmail_ui_user/features/manage_account/data/local/preferences_setting_manager.dart';
import 'package:tmail_ui_user/features/manage_account/data/local/setting_cache_manager.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_manager.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/new_email_cache_worker_queue.dart';
import 'package:tmail_ui_user/features/offline_mode/manager/opened_email_cache_manager.dart';
@@ -94,6 +95,7 @@ class LocalBindings extends Bindings {
Get.put(SessionHiveCacheClient());
Get.put(SessionCacheManager(Get.find<SessionHiveCacheClient>()));
Get.put(LocalSortOrderManager(Get.find<SharedPreferences>()));
Get.put(SettingCacheManager(Get.find<SharedPreferences>()));
Get.put(CachingManager(
Get.find<MailboxCacheManager>(),
Get.find<StateCacheManager>(),
@@ -5612,4 +5612,11 @@ class AppLocalizations {
name: 'labelVisibilityToggleDescription',
);
}
String get theLabelFeatureIsNowAvailable {
return Intl.message(
'The label feature is now available.',
name: 'theLabelFeatureIsNowAvailable',
);
}
}