dev
dart 97 lines 4.23 KB
Raw
1 import 'package:flutter/material.dart';
2 import 'package:cake_wallet/src/widgets/picker.dart';
3 import 'package:flutter/cupertino.dart';
4 import 'package:cake_wallet/generated/i18n.dart';
5
6 import 'package:cake_wallet/entities/seed_type.dart';
7
8 class SeedLanguagePickerOption {
9 SeedLanguagePickerOption(this.name, this.nameLocalized, this.image, this.supportedSeedTypes);
10
11 final String name;
12 final String nameLocalized;
13 final Image image;
14 final List<MoneroSeedType> supportedSeedTypes;
15 }
16
17 final List<SeedLanguagePickerOption> seedLanguages = [
18 SeedLanguagePickerOption(
19 'English',
20 S.current.seed_language_english,
21 Image.asset('assets/images/flags/usa.png'),
22 [MoneroSeedType.legacy, MoneroSeedType.polyseed, MoneroSeedType.bip39],
23 ),
24 SeedLanguagePickerOption('Chinese (Simplified)', S.current.seed_language_chinese,
25 Image.asset('assets/images/flags/chn.png'), [MoneroSeedType.legacy, MoneroSeedType.polyseed]),
26 SeedLanguagePickerOption('Chinese (Traditional)', S.current.seed_language_chinese_traditional,
27 Image.asset('assets/images/flags/chn.png'), [MoneroSeedType.polyseed]),
28 SeedLanguagePickerOption('Dutch', S.current.seed_language_dutch,
29 Image.asset('assets/images/flags/nld.png'), [MoneroSeedType.legacy]),
30 SeedLanguagePickerOption('German', S.current.seed_language_german,
31 Image.asset('assets/images/flags/deu.png'), [MoneroSeedType.legacy]),
32 SeedLanguagePickerOption('Japanese', S.current.seed_language_japanese,
33 Image.asset('assets/images/flags/jpn.png'), [MoneroSeedType.legacy, MoneroSeedType.polyseed]),
34 SeedLanguagePickerOption('Korean', S.current.seed_language_korean,
35 Image.asset('assets/images/flags/kor.png'), [MoneroSeedType.polyseed]),
36 SeedLanguagePickerOption('Portuguese', S.current.seed_language_portuguese,
37 Image.asset('assets/images/flags/prt.png'), [MoneroSeedType.legacy, MoneroSeedType.polyseed]),
38 SeedLanguagePickerOption('Russian', S.current.seed_language_russian,
39 Image.asset('assets/images/flags/rus.png'), [MoneroSeedType.legacy]),
40 SeedLanguagePickerOption('Czech', S.current.seed_language_czech,
41 Image.asset('assets/images/flags/czk.png'), [MoneroSeedType.polyseed]),
42 SeedLanguagePickerOption('Spanish', S.current.seed_language_spanish,
43 Image.asset('assets/images/flags/esp.png'), [MoneroSeedType.legacy, MoneroSeedType.polyseed]),
44 SeedLanguagePickerOption('French', S.current.seed_language_french,
45 Image.asset('assets/images/flags/fra.png'), [MoneroSeedType.legacy, MoneroSeedType.polyseed]),
46 SeedLanguagePickerOption('Italian', S.current.seed_language_italian,
47 Image.asset('assets/images/flags/ita.png'), [MoneroSeedType.legacy, MoneroSeedType.polyseed]),
48 ];
49
50 const defaultSeedLanguage = 'English';
51
52 enum Places { topLeft, topRight, bottomLeft, bottomRight, inside }
53
54 class SeedLanguagePicker extends StatefulWidget {
55 SeedLanguagePicker({
56 Key? key,
57 this.selected = defaultSeedLanguage,
58 this.seedType = MoneroSeedType.defaultSeedType,
59 required this.onItemSelected,
60 }) : super(key: key);
61
62 final MoneroSeedType seedType;
63 final String selected;
64 final Function(String) onItemSelected;
65
66 @override
67 SeedLanguagePickerState createState() => SeedLanguagePickerState(
68 selected: selected, onItemSelected: onItemSelected, seedType: seedType);
69 }
70
71 class SeedLanguagePickerState extends State<SeedLanguagePicker> {
72 SeedLanguagePickerState(
73 {required this.selected, required this.onItemSelected, required this.seedType});
74
75 final MoneroSeedType seedType;
76 final String selected;
77 final Function(String) onItemSelected;
78
79 @override
80 Widget build(BuildContext context) {
81 final availableSeedLanguages = seedLanguages
82 .where((SeedLanguagePickerOption e) => e.supportedSeedTypes.contains(seedType));
83
84 return Picker(
85 selectedAtIndex: availableSeedLanguages.map((e) => e.name).toList().indexOf(selected),
86 items: availableSeedLanguages.map((e) => e.name).toList(),
87 images: availableSeedLanguages.map((e) => e.image).toList(),
88 isGridView: true,
89 title: S.of(context).seed_choose,
90 hintText: S.of(context).seed_choose,
91 matchingCriteria: (String language, String searchText) {
92 return language.toLowerCase().contains(searchText);
93 },
94 onItemSelected: onItemSelected,
95 );
96 }
97 }