sort system lang to top of language dropdown, set defaults to system lang

pull/795/head
ggurdin 2 years ago
parent 0dbd87dba1
commit ede77509aa

@ -1,14 +1,15 @@
import 'dart:developer';
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 'package:fluffychat/pangea/controllers/pangea_controller.dart';
import 'package:fluffychat/pangea/models/language_model.dart';
import 'package:fluffychat/pangea/utils/error_handler.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,

@ -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<PLanguageDropdown> {
@override
Widget build(BuildContext context) {
final List<LanguageModel> 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<String> 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)!);
}

Loading…
Cancel
Save