Sort English and Spanish to the top of the language list

pull/795/head
ggurdin 2 years ago
parent 19ef30fa1e
commit acbb7fe419

@ -1,8 +1,8 @@
// Flutter imports: // Flutter imports:
import 'package:flutter/material.dart';
// Project imports: // Project imports:
import 'package:fluffychat/pangea/models/language_model.dart'; import 'package:fluffychat/pangea/models/language_model.dart';
import 'package:flutter/material.dart';
import '../../widgets/flag.dart'; import '../../widgets/flag.dart';
class PLanguageDropdown extends StatefulWidget { class PLanguageDropdown extends StatefulWidget {
@ -11,13 +11,13 @@ class PLanguageDropdown extends StatefulWidget {
final Function(LanguageModel) onChange; final Function(LanguageModel) onChange;
final bool showMultilingual; final bool showMultilingual;
const PLanguageDropdown( const PLanguageDropdown({
{Key? key, super.key,
required this.languages, required this.languages,
required this.onChange, required this.onChange,
required this.initialLanguage, required this.initialLanguage,
this.showMultilingual = false}) this.showMultilingual = false,
: super(key: key); });
@override @override
State<PLanguageDropdown> createState() => _PLanguageDropdownState(); State<PLanguageDropdown> createState() => _PLanguageDropdownState();
@ -27,18 +27,32 @@ class _PLanguageDropdownState extends State<PLanguageDropdown> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final List<LanguageModel> sortedLanguages = widget.languages; final List<LanguageModel> sortedLanguages = widget.languages;
sortedLanguages.sort((a, b) =>
a.getDisplayName(context)!.compareTo(b.getDisplayName(context)!)); 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;
}
return a.getDisplayName(context)!.compareTo(b.getDisplayName(context)!);
}
sortedLanguages.sort((a, b) => sortLanguages(a, b));
return Padding( return Padding(
padding: const EdgeInsets.all(12), padding: const EdgeInsets.all(12),
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
border: Border.all( border: Border.all(
color: Theme.of(context).colorScheme.secondary, color: Theme.of(context).colorScheme.secondary,
width: 0.5, width: 0.5,
), ),
borderRadius: const BorderRadius.all(Radius.circular(10))), borderRadius: const BorderRadius.all(Radius.circular(10)),
),
child: DropdownButton<LanguageModel>( child: DropdownButton<LanguageModel>(
// Initial Value // Initial Value
hint: Row( hint: Row(
@ -55,11 +69,12 @@ class _PLanguageDropdownState extends State<PLanguageDropdown> {
Text( Text(
widget.initialLanguage.getDisplayName(context) ?? "", widget.initialLanguage.getDisplayName(context) ?? "",
style: const TextStyle().copyWith( style: const TextStyle().copyWith(
color: Theme.of(context).textTheme.bodyLarge!.color, color: Theme.of(context).textTheme.bodyLarge!.color,
fontSize: 14), fontSize: 14,
),
overflow: TextOverflow.clip, overflow: TextOverflow.clip,
textAlign: TextAlign.center, textAlign: TextAlign.center,
) ),
], ],
), ),
@ -71,19 +86,19 @@ class _PLanguageDropdownState extends State<PLanguageDropdown> {
items: [ items: [
if (widget.showMultilingual) if (widget.showMultilingual)
DropdownMenuItem( DropdownMenuItem(
value: LanguageModel.multiLingual(context), value: LanguageModel.multiLingual(context),
child: LanguageDropDownEntry( child: LanguageDropDownEntry(
languageModel: LanguageModel.multiLingual(context), languageModel: LanguageModel.multiLingual(context),
)), ),
...sortedLanguages ),
.map( ...sortedLanguages.map(
(languageModel) => DropdownMenuItem( (languageModel) => DropdownMenuItem(
value: languageModel, value: languageModel,
child: LanguageDropDownEntry( child: LanguageDropDownEntry(
languageModel: languageModel, languageModel: languageModel,
)), ),
) ),
.toList() ),
], ],
onChanged: (value) => widget.onChange(value!), onChanged: (value) => widget.onChange(value!),
), ),
@ -95,9 +110,9 @@ class _PLanguageDropdownState extends State<PLanguageDropdown> {
class LanguageDropDownEntry extends StatelessWidget { class LanguageDropDownEntry extends StatelessWidget {
final LanguageModel languageModel; final LanguageModel languageModel;
const LanguageDropDownEntry({ const LanguageDropDownEntry({
Key? key, super.key,
required this.languageModel, required this.languageModel,
}) : super(key: key); });
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -114,11 +129,12 @@ class LanguageDropDownEntry extends StatelessWidget {
Text( Text(
languageModel.getDisplayName(context) ?? "", languageModel.getDisplayName(context) ?? "",
style: const TextStyle().copyWith( style: const TextStyle().copyWith(
color: Theme.of(context).textTheme.bodyLarge!.color, color: Theme.of(context).textTheme.bodyLarge!.color,
fontSize: 14), fontSize: 14,
),
overflow: TextOverflow.clip, overflow: TextOverflow.clip,
textAlign: TextAlign.center, textAlign: TextAlign.center,
) ),
], ],
), ),
); );

Loading…
Cancel
Save