TF-297 Get stored language when launch app
This commit is contained in:
@@ -17,4 +17,14 @@ class LanguageCacheManager {
|
|||||||
_sharedPreferences.setString(keyCountryCode, localeCurrent.countryCode ?? '')
|
_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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
import 'package:core/core.dart';
|
|
||||||
|
|
||||||
class SavingLanguageApp extends UIState {
|
|
||||||
|
|
||||||
SavingLanguageApp();
|
|
||||||
|
|
||||||
@override
|
|
||||||
List<Object?> get props => [];
|
|
||||||
}
|
|
||||||
|
|
||||||
class SaveLanguageAppSuccess extends UIState {
|
|
||||||
|
|
||||||
SaveLanguageAppSuccess();
|
|
||||||
|
|
||||||
@override
|
|
||||||
List<Object?> get props => [];
|
|
||||||
}
|
|
||||||
|
|
||||||
class SaveLanguageAppFailure extends FeatureFailure {
|
|
||||||
final dynamic exception;
|
|
||||||
|
|
||||||
SaveLanguageAppFailure(this.exception);
|
|
||||||
|
|
||||||
@override
|
|
||||||
List<Object> get props => [exception];
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
import 'dart:ui';
|
||||||
|
|
||||||
|
import 'package:core/core.dart';
|
||||||
|
|
||||||
|
class SavingLanguage extends UIState {
|
||||||
|
|
||||||
|
SavingLanguage();
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [];
|
||||||
|
}
|
||||||
|
|
||||||
|
class SaveLanguageSuccess extends UIState {
|
||||||
|
|
||||||
|
final Locale localeStored;
|
||||||
|
|
||||||
|
SaveLanguageSuccess(this.localeStored);
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [localeStored];
|
||||||
|
}
|
||||||
|
|
||||||
|
class SaveLanguageFailure extends FeatureFailure {
|
||||||
|
final dynamic exception;
|
||||||
|
|
||||||
|
SaveLanguageFailure(this.exception);
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object> get props => [exception];
|
||||||
|
}
|
||||||
+6
-6
@@ -5,20 +5,20 @@ import 'package:core/presentation/state/failure.dart';
|
|||||||
import 'package:core/presentation/state/success.dart';
|
import 'package:core/presentation/state/success.dart';
|
||||||
import 'package:dartz/dartz.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/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;
|
final ManageAccountRepository manageAccountRepository;
|
||||||
|
|
||||||
SaveLanguageAppInteractor(this.manageAccountRepository);
|
SaveLanguageInteractor(this.manageAccountRepository);
|
||||||
|
|
||||||
Stream<Either<Failure, Success>> execute(Locale localeCurrent) async* {
|
Stream<Either<Failure, Success>> execute(Locale localeCurrent) async* {
|
||||||
try {
|
try {
|
||||||
yield Right(SavingLanguageApp());
|
yield Right(SavingLanguage());
|
||||||
await manageAccountRepository.persistLanguage(localeCurrent);
|
await manageAccountRepository.persistLanguage(localeCurrent);
|
||||||
yield Right(SaveLanguageAppSuccess());
|
yield Right(SaveLanguageSuccess(localeCurrent));
|
||||||
} catch (exception) {
|
} catch (exception) {
|
||||||
yield Left(SaveLanguageAppFailure(exception));
|
yield Left(SaveLanguageFailure(exception));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+3
-3
@@ -1,14 +1,14 @@
|
|||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:tmail_ui_user/features/base/base_bindings.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/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';
|
import 'package:tmail_ui_user/features/manage_account/presentation/language_and_region/language_and_region_controller.dart';
|
||||||
|
|
||||||
class LanguageAndRegionBindings extends BaseBindings {
|
class LanguageAndRegionBindings extends BaseBindings {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void bindingsController() {
|
void bindingsController() {
|
||||||
Get.lazyPut(() => LanguageAndRegionController(Get.find<SaveLanguageAppInteractor>()));
|
Get.lazyPut(() => LanguageAndRegionController(Get.find<SaveLanguageInteractor>()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -21,7 +21,7 @@ class LanguageAndRegionBindings extends BaseBindings {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void bindingsInteractor() {
|
void bindingsInteractor() {
|
||||||
Get.lazyPut(() => SaveLanguageAppInteractor(Get.find<ManageAccountRepository>()));
|
Get.lazyPut(() => SaveLanguageInteractor(Get.find<ManageAccountRepository>()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
+14
-7
@@ -3,17 +3,18 @@ import 'dart:ui';
|
|||||||
|
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:tmail_ui_user/features/base/base_controller.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';
|
import 'package:tmail_ui_user/main/localizations/localization_service.dart';
|
||||||
|
|
||||||
class LanguageAndRegionController extends BaseController {
|
class LanguageAndRegionController extends BaseController {
|
||||||
|
|
||||||
final SaveLanguageAppInteractor _saveLanguageAppInteractor;
|
final SaveLanguageInteractor _saveLanguageInteractor;
|
||||||
|
|
||||||
final listSupportedLanguages = <Locale>[].obs;
|
final listSupportedLanguages = <Locale>[].obs;
|
||||||
final languageSelected = LocalizationService.defaultLocale.obs;
|
final languageSelected = LocalizationService.defaultLocale.obs;
|
||||||
|
|
||||||
LanguageAndRegionController(this._saveLanguageAppInteractor);
|
LanguageAndRegionController(this._saveLanguageInteractor);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onReady() {
|
void onReady() {
|
||||||
@@ -22,7 +23,15 @@ class LanguageAndRegionController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onDone() {}
|
void onDone() {
|
||||||
|
viewState.value.fold(
|
||||||
|
(failure) => null,
|
||||||
|
(success) {
|
||||||
|
if (success is SaveLanguageSuccess) {
|
||||||
|
LocalizationService.changeLocale(success.localeStored.languageCode);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onError(error) {}
|
void onError(error) {}
|
||||||
@@ -40,12 +49,10 @@ class LanguageAndRegionController extends BaseController {
|
|||||||
|
|
||||||
void selectLanguage(Locale? selectedLocale) {
|
void selectLanguage(Locale? selectedLocale) {
|
||||||
languageSelected.value = selectedLocale ?? LocalizationService.defaultLocale;
|
languageSelected.value = selectedLocale ?? LocalizationService.defaultLocale;
|
||||||
LocalizationService.changeLocale(languageSelected.value.languageCode);
|
|
||||||
|
|
||||||
_saveLanguage(languageSelected.value);
|
_saveLanguage(languageSelected.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _saveLanguage(Locale localeCurrent) {
|
void _saveLanguage(Locale localeCurrent) {
|
||||||
consumeState(_saveLanguageAppInteractor.execute(localeCurrent));
|
consumeState(_saveLanguageInteractor.execute(localeCurrent));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
|
|
||||||
import 'dart:ui';
|
import 'dart:ui';
|
||||||
|
|
||||||
|
import 'package:core/utils/app_logger.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_manager.dart';
|
||||||
|
|
||||||
class LocalizationService extends Translations {
|
class LocalizationService extends Translations {
|
||||||
|
|
||||||
@@ -25,17 +27,25 @@ class LocalizationService extends Translations {
|
|||||||
static final locale = _getLocaleFromLanguage();
|
static final locale = _getLocaleFromLanguage();
|
||||||
|
|
||||||
static void changeLocale(String langCode) {
|
static void changeLocale(String langCode) {
|
||||||
|
log('LocalizationService::changeLocale(): langCode: $langCode');
|
||||||
final locale = _getLocaleFromLanguage(langCode: langCode);
|
final locale = _getLocaleFromLanguage(langCode: langCode);
|
||||||
Get.updateLocale(locale);
|
Get.updateLocale(locale);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Locale _getLocaleFromLanguage({String? langCode}) {
|
static Locale _getLocaleFromLanguage({String? langCode}) {
|
||||||
final lang = langCode ?? Get.deviceLocale?.languageCode;
|
final languageCacheManager = Get.find<LanguageCacheManager>();
|
||||||
|
final localeStored = languageCacheManager.getStoredLanguage();
|
||||||
|
|
||||||
final localeSelected = supportedLocales
|
log('LocalizationService::_getLocaleFromLanguage(): localeStored: ${localeStored.toString()}');
|
||||||
.firstWhereOrNull((locale) => locale.languageCode == lang);
|
|
||||||
|
|
||||||
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
|
@override
|
||||||
|
|||||||
Reference in New Issue
Block a user