From 453338da01ae5cc7ef2ebac9fe6e634dd205ff43 Mon Sep 17 00:00:00 2001 From: ggurdin <46800240+ggurdin@users.noreply.github.com> Date: Fri, 10 Oct 2025 15:11:24 -0400 Subject: [PATCH] fix: fix storage of selected language not working on mobile (#4334) --- .../pages/create_pangea_account_page.dart | 34 ++++++++----------- lib/pangea/login/utils/lang_code_repo.dart | 9 ++++- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/lib/pangea/login/pages/create_pangea_account_page.dart b/lib/pangea/login/pages/create_pangea_account_page.dart index c5a7b01ff..7829c5990 100644 --- a/lib/pangea/login/pages/create_pangea_account_page.dart +++ b/lib/pangea/login/pages/create_pangea_account_page.dart @@ -48,9 +48,10 @@ class CreatePangeaAccountPageState extends State { String? _spaceId; String? _courseLangCode; - String? get _cachedLangCode => LangCodeRepo.get(); + Future get _cachedLangCode => LangCodeRepo.get(); - String? get _langCode => _courseLangCode ?? _cachedLangCode; + Future get _langCode async => + _courseLangCode ?? (await _cachedLangCode); String? get _cachedSpaceCode => MatrixState.pangeaController.spaceCodeController.cachedSpaceCode; @@ -131,10 +132,10 @@ class CreatePangeaAccountPageState extends State { } Future _updateTargetLanguage() async { - if (_langCode == null) return; + final langCode = await _langCode; await MatrixState.pangeaController.userController.updateProfile( (profile) { - profile.userSettings.targetLanguage = _langCode; + profile.userSettings.targetLanguage = langCode; return profile; }, waitForDataInSync: true, @@ -150,15 +151,7 @@ class CreatePangeaAccountPageState extends State { } try { - if (_langCode == null) { - // at this point, there's no cached selected language, and couldn't get - // language from cached course code, so go back to the language selection page - if (mounted) { - context.go('/registration'); - } - return; - } - + final langCode = await _langCode; final updateFuture = [ _setAvatar(), MatrixState.pangeaController.userController.updateProfile( @@ -170,18 +163,19 @@ class CreatePangeaAccountPageState extends State { profile.userSettings.sourceLanguage = systemLang; } - profile.userSettings.targetLanguage = _langCode; + profile.userSettings.targetLanguage = langCode; profile.userSettings.createdAt = DateTime.now(); return profile; }, waitForDataInSync: true, ), - MatrixState.pangeaController.userController.updateAnalyticsProfile( - targetLanguage: PLanguageStore.byLangCode(_langCode!), - baseLanguage: - MatrixState.pangeaController.languageController.systemLanguage, - level: 1, - ), + if (langCode != null) + MatrixState.pangeaController.userController.updateAnalyticsProfile( + targetLanguage: PLanguageStore.byLangCode(langCode), + baseLanguage: + MatrixState.pangeaController.languageController.systemLanguage, + level: 1, + ), ]; await Future.wait(updateFuture).timeout( diff --git a/lib/pangea/login/utils/lang_code_repo.dart b/lib/pangea/login/utils/lang_code_repo.dart index c2647b81a..9cd4bbda6 100644 --- a/lib/pangea/login/utils/lang_code_repo.dart +++ b/lib/pangea/login/utils/lang_code_repo.dart @@ -3,15 +3,22 @@ import 'package:get_storage/get_storage.dart'; class LangCodeRepo { static final GetStorage _storage = GetStorage('lang_code_storage'); - static String? get() { + static Future _init() async { + await GetStorage.init('lang_code_storage'); + } + + static Future get() async { + await _init(); return _storage.read('lang_code'); } static Future set(String langcode) async { + await _init(); await _storage.write('lang_code', langcode); } static Future remove() async { + await _init(); await _storage.remove('lang_code'); } }