diff --git a/app/lib/constants/sp_keys.dart b/app/lib/constants/sp_keys.dart index d3b1d79..5b23928 100644 --- a/app/lib/constants/sp_keys.dart +++ b/app/lib/constants/sp_keys.dart @@ -1,3 +1,4 @@ class SPKeys { static final String brightnessMode = 'BRIGHTNESS_MODE'; + static final String userLanguage = 'USER_LANGUAGE'; } \ No newline at end of file diff --git a/app/lib/constants/supported_locales.dart b/app/lib/constants/supported_locales.dart new file mode 100644 index 0000000..0897879 --- /dev/null +++ b/app/lib/constants/supported_locales.dart @@ -0,0 +1,22 @@ +import 'package:flutter/material.dart'; + +enum SupportedLocale { + zh_CN, + en, +} + +const zh_CN = Locale('zh', 'CN'); +const en = Locale('en'); + +const supportedLocales = [ + zh_CN, + en, +]; + +const supportedLocaleNames = { + SupportedLocale.zh_CN: '简体中文', + SupportedLocale.en: 'English', +}; + +Locale getSupportedLocale(SupportedLocale supportedLocale) => supportedLocales[supportedLocale.index]; + diff --git a/app/lib/extensions.dart b/app/lib/extensions.dart index 6bb96f2..4d66350 100644 --- a/app/lib/extensions.dart +++ b/app/lib/extensions.dart @@ -3,6 +3,8 @@ library extensions; export 'package:dde_gesture_manager/extensions/sout_extension.dart'; export 'package:dde_gesture_manager/extensions/string_extension.dart'; export 'package:dde_gesture_manager/extensions/context_extension.dart'; +export 'package:dde_gesture_manager/extensions/shared_preferences_extension.dart'; + export 'package:dde_gesture_manager/generated/locale_keys.g.dart'; export 'package:easy_localization/easy_localization.dart'; diff --git a/app/lib/extensions/shared_preferences_extension.dart b/app/lib/extensions/shared_preferences_extension.dart new file mode 100644 index 0000000..b8a0d27 --- /dev/null +++ b/app/lib/extensions/shared_preferences_extension.dart @@ -0,0 +1,13 @@ +import 'package:shared_preferences/shared_preferences.dart'; + +extension SharedPreferencesExtenstion on SharedPreferences { + Future updateInt(String key, int value) { + if (this.getInt(key) == value) return Future.value(false); + return this.setInt(key, value); + } + + Future updateString(String key, String value) { + if (this.getString(key) == value) return Future.value(false); + return this.setString(key, value); + } +} diff --git a/app/lib/main.dart b/app/lib/main.dart index 0df924e..702852e 100644 --- a/app/lib/main.dart +++ b/app/lib/main.dart @@ -1,14 +1,18 @@ +import 'package:dde_gesture_manager/constants/sp_keys.dart'; +import 'package:dde_gesture_manager/constants/supported_locales.dart'; +import 'package:dde_gesture_manager/extensions.dart'; import 'package:dde_gesture_manager/generated/codegen_loader.g.dart'; +import 'package:dde_gesture_manager/generated/locale_keys.g.dart'; import 'package:dde_gesture_manager/models/configs.dart'; import 'package:dde_gesture_manager/models/configs.provider.dart'; import 'package:dde_gesture_manager/models/settings.provider.dart'; import 'package:dde_gesture_manager/themes/dark.dart'; import 'package:dde_gesture_manager/themes/light.dart'; +import 'package:dde_gesture_manager/utils/helper.dart'; import 'package:dde_gesture_manager/utils/init.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; -import 'package:provider/provider.dart'; import 'pages/home.dart'; @@ -18,11 +22,8 @@ Future main() async { await EasyLocalization.ensureInitialized(); await initConfigs(); runApp(EasyLocalization( - supportedLocales: [ - Locale('zh', 'CN'), - Locale('en'), - ], - fallbackLocale: Locale('zh', 'CN'), + supportedLocales: supportedLocales, + fallbackLocale: zh_CN, path: 'resources/langs', assetLoader: CodegenLoader(), child: MyApp(), @@ -40,6 +41,7 @@ class MyApp extends StatelessWidget { builder: (context, child) { var isDarkMode = context.watch().isDarkMode; var brightnessMode = context.watch().brightnessMode; + H().sp.updateInt(SPKeys.brightnessMode, brightnessMode?.index ?? 0); late bool showDarkMode; if (brightnessMode == BrightnessMode.system) { showDarkMode = isDarkMode ?? false; @@ -47,7 +49,7 @@ class MyApp extends StatelessWidget { showDarkMode = brightnessMode == BrightnessMode.dark; } return MaterialApp( - title: 'Flutter Demo', + title: CodegenLoader.mapLocales[context.locale.toString()]?[LocaleKeys.app_name], theme: showDarkMode ? darkTheme : lightTheme, localizationsDelegates: context.localizationDelegates, supportedLocales: context.supportedLocales, diff --git a/app/lib/models/configs.dart b/app/lib/models/configs.dart index f8822b1..7df082f 100644 --- a/app/lib/models/configs.dart +++ b/app/lib/models/configs.dart @@ -14,6 +14,7 @@ class Configs { BrightnessMode? brightnessMode; Configs() { - this.brightnessMode = BrightnessMode.values[H().sp.getInt(SPKeys.brightnessMode)?.clamp(0, 2) ?? 0]; + this.brightnessMode = + BrightnessMode.values[H().sp.getInt(SPKeys.brightnessMode)?.clamp(0, BrightnessMode.values.length - 1) ?? 0]; } } diff --git a/app/lib/pages/home.dart b/app/lib/pages/home.dart index 586af74..d24aa85 100644 --- a/app/lib/pages/home.dart +++ b/app/lib/pages/home.dart @@ -19,7 +19,7 @@ class _HomePageState extends State { Row( mainAxisSize: MainAxisSize.max, children: [ - Text('asd'), + Text('WIP'), ], ), SizedBox( diff --git a/app/lib/utils/init_linux.dart b/app/lib/utils/init_linux.dart index 02e7fed..e11a845 100644 --- a/app/lib/utils/init_linux.dart +++ b/app/lib/utils/init_linux.dart @@ -1,9 +1,14 @@ +import 'package:dde_gesture_manager/constants/sp_keys.dart'; +import 'package:dde_gesture_manager/constants/supported_locales.dart'; +import 'package:dde_gesture_manager/extensions.dart'; +import 'package:dde_gesture_manager/generated/codegen_loader.g.dart'; +import 'package:dde_gesture_manager/generated/locale_keys.g.dart'; +import 'package:dde_gesture_manager/models/settings.provider.dart'; import 'package:dde_gesture_manager/utils/helper.dart'; import 'package:flutter/material.dart'; import 'package:gsettings/gsettings.dart'; import 'package:provider/provider.dart'; import 'package:window_manager/window_manager.dart'; -import 'package:dde_gesture_manager/models/settings.provider.dart'; Future initEvents(BuildContext context) async { var isDark = MediaQuery.of(context).platformBrightness == Brightness.dark; @@ -32,7 +37,10 @@ Future initEvents(BuildContext context) async { Future initConfigs() async { await H().initSharedPreference(); - var windowManager = WindowManager.instance; - windowManager.setTitle('Gesture Manager For DDE'); + var userLanguageIndex = H().sp.getInt(SPKeys.userLanguage) ?? 0; + var locale = supportedLocales[userLanguageIndex]; + windowManager.setTitle(CodegenLoader.mapLocales[locale.toString()]?[LocaleKeys.app_name]); windowManager.setMinimumSize(const Size(800, 600)); } + +var windowManager = WindowManager.instance; diff --git a/app/lib/widgets/footer.dart b/app/lib/widgets/footer.dart index d61bb67..38a1f95 100644 --- a/app/lib/widgets/footer.dart +++ b/app/lib/widgets/footer.dart @@ -1,8 +1,9 @@ -import 'package:dde_gesture_manager/models/configs.dart'; -import 'package:dde_gesture_manager/models/configs.provider.dart'; +import 'package:dde_gesture_manager/extensions.dart'; +import 'package:dde_gesture_manager/widgets/language_switcher.dart'; +import 'package:dde_gesture_manager/widgets/theme_switcher.dart'; +import 'package:dde_gesture_manager/widgets/version_checker.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:dde_gesture_manager/extensions.dart'; class Footer extends StatefulWidget { const Footer({Key? key}) : super(key: key); @@ -14,7 +15,6 @@ class Footer extends StatefulWidget { class _FooterState extends State