diff --git a/lib/features/manage_account/data/local/language_cache_manager.dart b/lib/features/manage_account/data/local/language_cache_manager.dart index e8a2b5063..7aa3f5782 100644 --- a/lib/features/manage_account/data/local/language_cache_manager.dart +++ b/lib/features/manage_account/data/local/language_cache_manager.dart @@ -17,4 +17,14 @@ class LanguageCacheManager { _sharedPreferences.setString(keyCountryCode, localeCurrent.countryCode ?? '') ]); } + + Locale? getStoredLanguage() { + final languageCode = _sharedPreferences.getString(keyLanguageCode); + final countryCode = _sharedPreferences.getString(keyCountryCode); + + if (languageCode?.isNotEmpty == true) { + return Locale(languageCode!, countryCode); + } + return null; + } } \ No newline at end of file diff --git a/lib/features/manage_account/domain/state/save_language_app_state.dart b/lib/features/manage_account/domain/state/save_language_app_state.dart deleted file mode 100644 index a9d6a5015..000000000 --- a/lib/features/manage_account/domain/state/save_language_app_state.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:core/core.dart'; - -class SavingLanguageApp extends UIState { - - SavingLanguageApp(); - - @override - List get props => []; -} - -class SaveLanguageAppSuccess extends UIState { - - SaveLanguageAppSuccess(); - - @override - List get props => []; -} - -class SaveLanguageAppFailure extends FeatureFailure { - final dynamic exception; - - SaveLanguageAppFailure(this.exception); - - @override - List get props => [exception]; -} \ No newline at end of file diff --git a/lib/features/manage_account/domain/state/save_language_state.dart b/lib/features/manage_account/domain/state/save_language_state.dart new file mode 100644 index 000000000..1accaf9a1 --- /dev/null +++ b/lib/features/manage_account/domain/state/save_language_state.dart @@ -0,0 +1,30 @@ +import 'dart:ui'; + +import 'package:core/core.dart'; + +class SavingLanguage extends UIState { + + SavingLanguage(); + + @override + List get props => []; +} + +class SaveLanguageSuccess extends UIState { + + final Locale localeStored; + + SaveLanguageSuccess(this.localeStored); + + @override + List get props => [localeStored]; +} + +class SaveLanguageFailure extends FeatureFailure { + final dynamic exception; + + SaveLanguageFailure(this.exception); + + @override + List get props => [exception]; +} \ No newline at end of file diff --git a/lib/features/manage_account/domain/usecases/save_language_app_interactor.dart b/lib/features/manage_account/domain/usecases/save_language_interactor.dart similarity index 69% rename from lib/features/manage_account/domain/usecases/save_language_app_interactor.dart rename to lib/features/manage_account/domain/usecases/save_language_interactor.dart index 917344a05..c547a09da 100644 --- a/lib/features/manage_account/domain/usecases/save_language_app_interactor.dart +++ b/lib/features/manage_account/domain/usecases/save_language_interactor.dart @@ -5,20 +5,20 @@ 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_language_app_state.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/state/save_language_state.dart'; -class SaveLanguageAppInteractor { +class SaveLanguageInteractor { final ManageAccountRepository manageAccountRepository; - SaveLanguageAppInteractor(this.manageAccountRepository); + SaveLanguageInteractor(this.manageAccountRepository); Stream> execute(Locale localeCurrent) async* { try { - yield Right(SavingLanguageApp()); + yield Right(SavingLanguage()); await manageAccountRepository.persistLanguage(localeCurrent); - yield Right(SaveLanguageAppSuccess()); + yield Right(SaveLanguageSuccess(localeCurrent)); } catch (exception) { - yield Left(SaveLanguageAppFailure(exception)); + yield Left(SaveLanguageFailure(exception)); } } } \ No newline at end of file diff --git a/lib/features/manage_account/presentation/language_and_region/language_and_region_bindings.dart b/lib/features/manage_account/presentation/language_and_region/language_and_region_bindings.dart index 33fdc14d5..d141c1a37 100644 --- a/lib/features/manage_account/presentation/language_and_region/language_and_region_bindings.dart +++ b/lib/features/manage_account/presentation/language_and_region/language_and_region_bindings.dart @@ -1,14 +1,14 @@ import 'package:get/get.dart'; import 'package:tmail_ui_user/features/base/base_bindings.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_app_interactor.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/usecases/save_language_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/language_and_region/language_and_region_controller.dart'; class LanguageAndRegionBindings extends BaseBindings { @override void bindingsController() { - Get.lazyPut(() => LanguageAndRegionController(Get.find())); + Get.lazyPut(() => LanguageAndRegionController(Get.find())); } @override @@ -21,7 +21,7 @@ class LanguageAndRegionBindings extends BaseBindings { @override void bindingsInteractor() { - Get.lazyPut(() => SaveLanguageAppInteractor(Get.find())); + Get.lazyPut(() => SaveLanguageInteractor(Get.find())); } @override diff --git a/lib/features/manage_account/presentation/language_and_region/language_and_region_controller.dart b/lib/features/manage_account/presentation/language_and_region/language_and_region_controller.dart index 9e5a592c1..b513b78b5 100644 --- a/lib/features/manage_account/presentation/language_and_region/language_and_region_controller.dart +++ b/lib/features/manage_account/presentation/language_and_region/language_and_region_controller.dart @@ -3,17 +3,18 @@ import 'dart:ui'; import 'package:get/get.dart'; import 'package:tmail_ui_user/features/base/base_controller.dart'; -import 'package:tmail_ui_user/features/manage_account/domain/usecases/save_language_app_interactor.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/state/save_language_state.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/usecases/save_language_interactor.dart'; import 'package:tmail_ui_user/main/localizations/localization_service.dart'; class LanguageAndRegionController extends BaseController { - final SaveLanguageAppInteractor _saveLanguageAppInteractor; + final SaveLanguageInteractor _saveLanguageInteractor; final listSupportedLanguages = [].obs; final languageSelected = LocalizationService.defaultLocale.obs; - LanguageAndRegionController(this._saveLanguageAppInteractor); + LanguageAndRegionController(this._saveLanguageInteractor); @override void onReady() { @@ -22,7 +23,15 @@ class LanguageAndRegionController extends BaseController { } @override - void onDone() {} + void onDone() { + viewState.value.fold( + (failure) => null, + (success) { + if (success is SaveLanguageSuccess) { + LocalizationService.changeLocale(success.localeStored.languageCode); + } + }); + } @override void onError(error) {} @@ -40,12 +49,10 @@ class LanguageAndRegionController extends BaseController { void selectLanguage(Locale? selectedLocale) { languageSelected.value = selectedLocale ?? LocalizationService.defaultLocale; - LocalizationService.changeLocale(languageSelected.value.languageCode); - _saveLanguage(languageSelected.value); } void _saveLanguage(Locale localeCurrent) { - consumeState(_saveLanguageAppInteractor.execute(localeCurrent)); + consumeState(_saveLanguageInteractor.execute(localeCurrent)); } } \ No newline at end of file diff --git a/lib/main/localizations/localization_service.dart b/lib/main/localizations/localization_service.dart index 5034ec991..3f2b195d0 100644 --- a/lib/main/localizations/localization_service.dart +++ b/lib/main/localizations/localization_service.dart @@ -1,7 +1,9 @@ import 'dart:ui'; +import 'package:core/utils/app_logger.dart'; import 'package:get/get.dart'; +import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_manager.dart'; class LocalizationService extends Translations { @@ -25,17 +27,25 @@ class LocalizationService extends Translations { static final locale = _getLocaleFromLanguage(); static void changeLocale(String langCode) { + log('LocalizationService::changeLocale(): langCode: $langCode'); final locale = _getLocaleFromLanguage(langCode: langCode); Get.updateLocale(locale); } static Locale _getLocaleFromLanguage({String? langCode}) { - final lang = langCode ?? Get.deviceLocale?.languageCode; + final languageCacheManager = Get.find(); + final localeStored = languageCacheManager.getStoredLanguage(); - final localeSelected = supportedLocales - .firstWhereOrNull((locale) => locale.languageCode == lang); + log('LocalizationService::_getLocaleFromLanguage(): localeStored: ${localeStored.toString()}'); - return localeSelected ?? Get.locale ?? defaultLocale; + if (localeStored != null) { + return localeStored; + } else { + final languageCodeCurrent = langCode ?? Get.deviceLocale?.languageCode; + final localeSelected = supportedLocales + .firstWhereOrNull((locale) => locale.languageCode == languageCodeCurrent); + return localeSelected ?? Get.locale ?? defaultLocale; + } } @override