diff --git a/lib/pangea/widgets/user_settings/p_language_dialog.dart b/lib/pangea/widgets/user_settings/p_language_dialog.dart index b914212dc..077959ead 100644 --- a/lib/pangea/widgets/user_settings/p_language_dialog.dart +++ b/lib/pangea/widgets/user_settings/p_language_dialog.dart @@ -1,14 +1,15 @@ import 'dart:developer'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:future_loading_dialog/future_loading_dialog.dart'; - +import 'package:fluffychat/pangea/constants/language_keys.dart'; +import 'package:fluffychat/pangea/controllers/language_list_controller.dart'; import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/models/language_model.dart'; import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/l10n.dart'; +import 'package:future_loading_dialog/future_loading_dialog.dart'; + import '../../../config/themes.dart'; import '../../../widgets/matrix.dart'; import 'p_language_dropdown.dart'; @@ -17,12 +18,24 @@ import 'p_question_container.dart'; pLanguageDialog(BuildContext parentContext, Function callback) { final PangeaController pangeaController = MatrixState.pangeaController; //PTODO: if source language not set by user, default to languge from device settings - LanguageModel selectedSourceLanguage = - pangeaController.languageController.userL1 ?? - pangeaController.pLanguageStore.targetOptions[0]; - LanguageModel selectedTargetLanguage = - pangeaController.languageController.userL2 ?? - pangeaController.pLanguageStore.targetOptions[1]; + final LanguageModel? userL1 = pangeaController.languageController.userL1; + final LanguageModel? userL2 = pangeaController.languageController.userL2; + final String systemLang = Localizations.localeOf(parentContext).languageCode; + final LanguageModel systemLanguage = PangeaLanguage.byLangCode(systemLang); + + LanguageModel selectedSourceLanguage = systemLanguage; + if (userL1 != null && userL1.langCode != LanguageKeys.unknownLanguage) { + selectedSourceLanguage = userL1; + } + + LanguageModel selectedTargetLanguage; + if (userL2 != null && userL2.langCode != LanguageKeys.unknownLanguage) { + selectedTargetLanguage = userL2; + } else { + selectedTargetLanguage = selectedSourceLanguage.langCode != 'en' + ? PangeaLanguage.byLangCode('en') + : PangeaLanguage.byLangCode('es'); + } return showDialog( useRootNavigator: false, diff --git a/lib/pangea/widgets/user_settings/p_language_dropdown.dart b/lib/pangea/widgets/user_settings/p_language_dropdown.dart index 0694355c5..e9a02bb33 100644 --- a/lib/pangea/widgets/user_settings/p_language_dropdown.dart +++ b/lib/pangea/widgets/user_settings/p_language_dropdown.dart @@ -1,8 +1,8 @@ // Flutter imports: +import 'package:fluffychat/pangea/models/language_model.dart'; import 'package:flutter/material.dart'; -import 'package:fluffychat/pangea/models/language_model.dart'; import '../../widgets/flag.dart'; class PLanguageDropdown extends StatefulWidget { @@ -27,17 +27,26 @@ class _PLanguageDropdownState extends State { @override Widget build(BuildContext context) { final List sortedLanguages = widget.languages; + final String systemLang = Localizations.localeOf(context).languageCode; int sortLanguages(LanguageModel a, LanguageModel b) { - if (a.langCode == 'en') { - return -1; // "English" comes first - } else if (b.langCode == 'en') { - return 1; - } else if (a.langCode == 'es') { - return -1; // "Spanish" comes second - } else if (b.langCode == 'es') { - return 1; + final String aLang = a.langCode; + final String bLang = b.langCode; + if (aLang == bLang) return 0; + + final List languagePriority = [systemLang, 'en', 'es']; + final bool aIsPriority = languagePriority.contains(a.langCode); + final bool bIsPriority = languagePriority.contains(b.langCode); + + if (aIsPriority && bIsPriority) { + final int aPriority = languagePriority.indexOf(a.langCode); + final int bPriority = languagePriority.indexOf(b.langCode); + return aPriority - bPriority; } + + if (aIsPriority) return -1; + if (bIsPriority) return 1; + return a.getDisplayName(context)!.compareTo(b.getDisplayName(context)!); }