From d186ef4e815c73de02f0a3c52bead1feca4eb5be Mon Sep 17 00:00:00 2001 From: Hanh Date: Sun, 14 Apr 2024 18:09:30 +1000 Subject: [PATCH] Language Select --- lib/appsettings.dart | 1 + lib/init.dart | 1 + lib/settings.pb.dart | 14 ++++++++++++++ lib/theme_editor.dart | 22 ++++++++++++++++++++-- proto/settings.proto | 1 + pubspec.yaml | 2 +- 6 files changed, 38 insertions(+), 3 deletions(-) diff --git a/lib/appsettings.dart b/lib/appsettings.dart index 2bc5c814..b1dcc216 100644 --- a/lib/appsettings.dart +++ b/lib/appsettings.dart @@ -31,6 +31,7 @@ extension AppSettingsExtension on AppSettings { if (!hasCustomSendSettings()) customSendSettings = CustomSendSettings()..defaults(); if (!hasBackgroundSync()) backgroundSync = 1; + if (!hasLanguage()) language = 'en'; } static AppSettings load(SharedPreferences prefs) { diff --git a/lib/init.dart b/lib/init.dart index f0a086cd..406c49b8 100644 --- a/lib/init.dart +++ b/lib/init.dart @@ -102,6 +102,7 @@ class _AppState extends State { ), ); return MaterialApp.router( + locale: Locale(appSettings.language), title: APP_NAME, debugShowCheckedModeBanner: false, theme: theme, diff --git a/lib/settings.pb.dart b/lib/settings.pb.dart index 31bdd114..45b2f2ca 100644 --- a/lib/settings.pb.dart +++ b/lib/settings.pb.dart @@ -42,6 +42,7 @@ class AppSettings extends $pb.GeneratedMessage { $core.bool? customSend, CustomSendSettings? customSendSettings, $core.int? backgroundSync, + $core.String? language, }) { final $result = create(); if (confirmations != null) { @@ -122,6 +123,9 @@ class AppSettings extends $pb.GeneratedMessage { if (backgroundSync != null) { $result.backgroundSync = backgroundSync; } + if (language != null) { + $result.language = language; + } return $result; } AppSettings._() : super(); @@ -155,6 +159,7 @@ class AppSettings extends $pb.GeneratedMessage { ..aOB(27, _omitFieldNames ? '' : 'customSend') ..aOM(28, _omitFieldNames ? '' : 'customSendSettings', subBuilder: CustomSendSettings.create) ..a<$core.int>(30, _omitFieldNames ? '' : 'backgroundSync', $pb.PbFieldType.OU3) + ..aOS(31, _omitFieldNames ? '' : 'language') ..hasRequiredFields = false ; @@ -416,6 +421,15 @@ class AppSettings extends $pb.GeneratedMessage { $core.bool hasBackgroundSync() => $_has(25); @$pb.TagNumber(30) void clearBackgroundSync() => clearField(30); + + @$pb.TagNumber(31) + $core.String get language => $_getSZ(26); + @$pb.TagNumber(31) + set language($core.String v) { $_setString(26, v); } + @$pb.TagNumber(31) + $core.bool hasLanguage() => $_has(26); + @$pb.TagNumber(31) + void clearLanguage() => clearField(31); } class CoinSettings extends $pb.GeneratedMessage { diff --git a/lib/theme_editor.dart b/lib/theme_editor.dart index e331b0b9..91a375b1 100644 --- a/lib/theme_editor.dart +++ b/lib/theme_editor.dart @@ -30,8 +30,26 @@ class _ThemeEditorState extends State return FormBuilder( key: formKey, child: Column(children: [ - FormBuilderSwitch(name: 'dark', title: Text(s.dark), - initialValue: _dark, onChanged: (v) => setState(() => setDark(v!)),), + FormBuilderRadioGroup( + decoration: InputDecoration(label: Text('Language')), + name: 'language', + initialValue: appSettings.language, + options: [ + FormBuilderFieldOption(value: 'en', child: Text('English')), + FormBuilderFieldOption(value: 'fr', child: Text('Français')), + FormBuilderFieldOption(value: 'es', child: Text('Spanish')), + FormBuilderFieldOption(value: 'pt', child: Text('Português')), + ], + onChanged: (v) => widget.appSettings.language = v!, + ), + Divider(), + Gap(8), + FormBuilderSwitch( + name: 'dark', + title: Text(s.dark), + initialValue: _dark, + onChanged: (v) => setState(() => setDark(v!)), + ), Gap(16), Wrap( spacing: 8, diff --git a/proto/settings.proto b/proto/settings.proto index 14e89e43..a73d2e82 100644 --- a/proto/settings.proto +++ b/proto/settings.proto @@ -28,6 +28,7 @@ message AppSettings { bool custom_send = 27; CustomSendSettings custom_send_settings = 28; uint32 background_sync = 30; + string language = 31; } message CoinSettings { diff --git a/pubspec.yaml b/pubspec.yaml index 9f8f5cb3..40fe8ac6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,7 +15,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 1.5.7+521 +version: 1.5.7+522 environment: sdk: ">=3.0.0 <4.0.0"