Merge branch 'sort-system-lang' into small-ui-updates

This commit is contained in:
ggurdin 2023-12-13 12:40:07 -05:00
commit 43bcbd0111
2 changed files with 44 additions and 22 deletions

View file

@ -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,

View file

@ -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,18 +27,27 @@ class _PLanguageDropdownState extends State<PLanguageDropdown> {
@override
Widget build(BuildContext context) {
final List<LanguageModel> sortedLanguages = widget.languages;
final String systemLang = Localizations.localeOf(context).languageCode;
final List<String> languagePriority = [systemLang, 'en', 'es'];
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 bool aIsPriority = languagePriority.contains(a.langCode);
final bool bIsPriority = languagePriority.contains(b.langCode);
if (!aIsPriority && !bIsPriority) {
return a.getDisplayName(context)!.compareTo(b.getDisplayName(context)!);
}
return a.getDisplayName(context)!.compareTo(b.getDisplayName(context)!);
if (aIsPriority && bIsPriority) {
final int aPriority = languagePriority.indexOf(a.langCode);
final int bPriority = languagePriority.indexOf(b.langCode);
return aPriority - bPriority;
}
return aIsPriority ? -1 : 1;
}
sortedLanguages.sort((a, b) => sortLanguages(a, b));