sort system lang to top of language dropdown, set defaults to system lang
This commit is contained in:
parent
0dbd87dba1
commit
ede77509aa
2 changed files with 43 additions and 21 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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…
Add table
Reference in a new issue