CWA-174 | added localeDetection() to Language class, moved languages from change_language.dart to language.dart, localeDetection() called in the settings store

Oleksandr Sobol committed Feb 26, 2020 at 19:18 UTC 90f66274a26992c83f6cfd9a13274b955c4b7c8e
5 files changed +40 -22
lib/src/domain/common/language.dart
+24
@@ -1,4 +1,21 @@
1 import 'package:flutter/material.dart';
2 +import 'package:devicelocale/devicelocale.dart';
3 +import 'package:intl/intl.dart';
4 +
5 +const Map<String, String> languages = {
6 + 'en': 'English',
7 + 'de': 'Deutsch (German)',
8 + 'es': 'Español (Spanish)',
9 + 'hi': 'हिंदी (Hindi)',
10 + 'ja': '日本 (Japanese)',
11 + 'ko': '한국어 (Korean)',
12 + 'nl': 'Nederlands (Dutch)',
13 + 'pl': 'Polski (Polish)',
14 + 'pt': 'Português (Portuguese)',
15 + 'ru': 'Русский (Russian)',
16 + 'uk': 'Українська (Ukrainian)',
17 + 'zh': '中文 (Chinese)'
18 +};
19
20 class Language with ChangeNotifier {
21 Language(this._currentLanguage);
@@ -11,4 +28,11 @@ class Language with ChangeNotifier {
28 _currentLanguage = language;
29 notifyListeners();
30 }
31 +
32 + static Future<String> localeDetection() async {
33 + String locale = await Devicelocale.currentLocale;
34 + locale = Intl.shortLocale(locale);
35 +
36 + return languages.keys.contains(locale) ? locale : 'en';
37 + }
38 }
\ No newline at end of file
lib/src/screens/settings/change_language.dart
+6 -21
@@ -6,21 +6,6 @@ import 'package:cake_wallet/src/domain/common/language.dart';
6 import 'package:cake_wallet/src/stores/settings/settings_store.dart';
7 import 'package:cake_wallet/src/screens/base_page.dart';
8
9 -const Map<String, String> _languages = {
10 - 'en': 'English',
11 - 'de': 'Deutsch (German)',
12 - 'es': 'Español (Spanish)',
13 - 'hi': 'हिंदी (Hindi)',
14 - 'ja': '日本 (Japanese)',
15 - 'ko': '한국어 (Korean)',
16 - 'nl': 'Nederlands (Dutch)',
17 - 'pl': 'Polski (Polish)',
18 - 'pt': 'Português (Portuguese)',
19 - 'ru': 'Русский (Russian)',
20 - 'uk': 'Українська (Ukrainian)',
21 - 'zh': '中文 (Chinese)'
22 -};
23 -
9 class ChangeLanguage extends BasePage {
10 @override
11 String get title => S.current.settings_change_language;
@@ -36,11 +21,11 @@ class ChangeLanguage extends BasePage {
21 return Container(
22 padding: EdgeInsets.only(top: 10.0, bottom: 10.0),
23 child: ListView.builder(
39 - itemCount: _languages.values.length,
24 + itemCount: languages.values.length,
25 itemBuilder: (BuildContext context, int index) {
26 final isCurrent = settingsStore.languageCode == null
27 ? false
43 - : _languages.keys.elementAt(index) ==
28 + : languages.keys.elementAt(index) ==
29 settingsStore.languageCode;
30
31 return Container(
@@ -48,7 +33,7 @@ class ChangeLanguage extends BasePage {
33 color: isCurrent ? currentColor : notCurrentColor,
34 child: ListTile(
35 title: Text(
51 - _languages.values.elementAt(index),
36 + languages.values.elementAt(index),
37 style: TextStyle(
38 fontSize: 16.0,
39 color: Theme.of(context).primaryTextTheme.title.color),
@@ -65,7 +50,7 @@ class ChangeLanguage extends BasePage {
50 ),
51 content: Text(
52 S.of(context).change_language_to(
68 - _languages.values.elementAt(index)),
53 + languages.values.elementAt(index)),
54 textAlign: TextAlign.center,
55 ),
56 actions: <Widget>[
@@ -76,9 +61,9 @@ class ChangeLanguage extends BasePage {
61 onPressed: () {
62 settingsStore.saveLanguageCode(
63 languageCode:
79 - _languages.keys.elementAt(index));
64 + languages.keys.elementAt(index));
65 currentLanguage.setCurrentLanguage(
81 - _languages.keys.elementAt(index));
66 + languages.keys.elementAt(index));
67 Navigator.of(context).pop();
68 },
69 child: Text(S.of(context).change)),
lib/src/stores/settings/settings_store.dart
+2 -1
@@ -13,6 +13,7 @@ import 'package:cake_wallet/src/screens/settings/items/item_headers.dart';
13 import 'package:cake_wallet/generated/i18n.dart';
14 import 'package:cake_wallet/src/domain/common/default_settings_migration.dart';
15 import 'package:package_info/package_info.dart';
16 +import 'package:cake_wallet/src/domain/common/language.dart';
17
18 part 'settings_store.g.dart';
19
@@ -93,7 +94,7 @@ abstract class SettingsStoreBase with Store {
94 : sharedPreferences.getInt(currentPinLength);
95 final savedLanguageCode =
96 sharedPreferences.getString(currentLanguageCode) == null
96 - ? 'en'
97 + ? await Language.localeDetection()
98 : sharedPreferences.getString(currentLanguageCode);
99
100 final store = SettingsStore(
pubspec.lock
+7
@@ -211,6 +211,13 @@ packages:
211 url: "https://pub.dartlang.org"
212 source: hosted
213 version: "1.0.6"
214 + devicelocale:
215 + dependency: "direct main"
216 + description:
217 + name: devicelocale
218 + url: "https://pub.dartlang.org"
219 + source: hosted
220 + version: "0.2.1"
221 dio:
222 dependency: "direct main"
223 description:
pubspec.yaml
+1
@@ -47,6 +47,7 @@ dependencies:
47 hive_flutter: ^0.2.1
48 local_auth: ^0.6.1
49 package_info: ^0.4.0+13
50 + devicelocale: ^0.2.1
51
52 # The following adds the Cupertino Icons font to your application.
53 # Use with the CupertinoIcons class for iOS style icons.