diff --git a/lib/pangea/login/pages/language_selection_page.dart b/lib/pangea/login/pages/language_selection_page.dart index ae1859795..59963076b 100644 --- a/lib/pangea/login/pages/language_selection_page.dart +++ b/lib/pangea/login/pages/language_selection_page.dart @@ -1,13 +1,17 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix_api_lite/utils/logs.dart'; +import 'package:provider/provider.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/common/widgets/shimmer_background.dart'; import 'package:fluffychat/pangea/common/widgets/shrinkable_text.dart'; import 'package:fluffychat/pangea/languages/language_model.dart'; import 'package:fluffychat/pangea/languages/language_service.dart'; +import 'package:fluffychat/pangea/languages/locale_provider.dart'; import 'package:fluffychat/pangea/languages/p_language_store.dart'; import 'package:fluffychat/pangea/learning_settings/language_mismatch_popup.dart'; import 'package:fluffychat/pangea/learning_settings/p_language_dropdown.dart'; @@ -63,15 +67,34 @@ class LanguageSelectionPageState extends State { _selectedLanguage = cachedTargetLang ?? _selectedLanguage; _baseLanguage = cachedBaseLang ?? _baseLanguage; }); + + _cacheLanguages(); }); } void _setSelectedLanguage(LanguageModel? l) { setState(() => _selectedLanguage = l); + _cacheLanguages(); } void _setBaseLanguage(LanguageModel? l) { setState(() => _baseLanguage = l); + _cacheLanguages(); + if (l != null) { + WidgetsBinding.instance.addPostFrameCallback((_) => _setAppLanguage(l)); + } + } + + void _setAppLanguage(LanguageModel language) { + try { + Provider.of( + context, + listen: false, + ).setLocale(language.langCode); + } catch (e, s) { + Logs().e('Error setting app language', e); + ErrorHandler.logError(e: e, s: s, data: {}); + } } Future _submit() async { @@ -83,17 +106,21 @@ class LanguageSelectionPageState extends State { return; } + await _cacheLanguages(); + context.go( + GoRouterState.of(context).fullPath?.contains('home') == true + ? '/home/language/signup' + : '/registration/create', + ); + } + + Future _cacheLanguages() async { await LangCodeRepo.set( LanguageSettings( targetLangCode: _selectedLanguage!.langCode, baseLangCode: _baseLanguage?.langCode, ), ); - context.go( - GoRouterState.of(context).fullPath?.contains('home') == true - ? '/home/language/signup' - : '/registration/create', - ); } @override