diff --git a/app/lib/constants/supported_locales.dart b/app/lib/constants/supported_locales.dart index 0897879..0524221 100644 --- a/app/lib/constants/supported_locales.dart +++ b/app/lib/constants/supported_locales.dart @@ -18,5 +18,7 @@ const supportedLocaleNames = { SupportedLocale.en: 'English', }; -Locale getSupportedLocale(SupportedLocale supportedLocale) => supportedLocales[supportedLocale.index]; +Locale transformSupportedLocale(SupportedLocale supportedLocale) => supportedLocales[supportedLocale.index]; +SupportedLocale? getSupportedLocale(Locale? locale) => + supportedLocales.contains(locale) ? SupportedLocale.values[supportedLocales.indexOf(locale!)] : null; diff --git a/app/lib/pages/gesture_editor.dart b/app/lib/pages/gesture_editor.dart index 4e4f56a..31d4d86 100644 --- a/app/lib/pages/gesture_editor.dart +++ b/app/lib/pages/gesture_editor.dart @@ -167,7 +167,7 @@ List _buildDataRows(List? gestures, BuildContext context) } }, selected: selected, - cells: editing ? _buildRowCellsEditing(gesture) : _buildRowCellsNormal(selected, gesture), + cells: editing ? _buildRowCellsEditing(gesture) : _buildRowCellsNormal(context, selected, gesture), ); }).toList(); @@ -180,51 +180,37 @@ List _buildRowCellsEditing(GestureProp gesture) => [ TextField(controller: TextEditingController(text: gesture.remark)), ].map((e) => DDataCell(e)).toList(); -List _buildRowCellsNormal(bool selected, GestureProp gesture) => [ +List _buildRowCellsNormal(BuildContext context, bool selected, GestureProp gesture) => [ Center( child: Text( '${LocaleKeys.gesture_editor_gestures}.${H.getGestureName(gesture.gesture)}', - style: TextStyle( - color: selected ? Colors.white : null, - ), ).tr(), ), Center( child: Text( '${LocaleKeys.gesture_editor_directions}.${H.getGestureDirectionName(gesture.direction)}', - style: TextStyle( - color: selected ? Colors.white : null, - ), ).tr()), Center( child: Text( '${gesture.fingers}', - style: TextStyle( - color: selected ? Colors.white : null, - ), ), ), Center( child: Text( '${LocaleKeys.gesture_editor_types}.${H.getGestureTypeName(gesture.type)}', - style: TextStyle( - color: selected ? Colors.white : null, - ), ).tr()), Text( gesture.command ?? '', - style: TextStyle( - color: selected ? Colors.white : null, - ), ), Text( gesture.remark ?? '', - style: TextStyle( - color: selected ? Colors.white : null, - ), ), ] .map( - (ele) => DDataCell(ele), + (ele) => DDataCell(DefaultTextStyle( + style: context.t.textTheme.bodyText2!.copyWith( + color: selected ? Colors.white : null, + ), + child: ele)), ) .toList(); diff --git a/app/lib/pages/local_manager.dart b/app/lib/pages/local_manager.dart index b4c8218..137ba5e 100644 --- a/app/lib/pages/local_manager.dart +++ b/app/lib/pages/local_manager.dart @@ -123,12 +123,17 @@ class _LocalManagerState extends State { color: _getItemBackgroundColor(index), child: Padding( padding: const EdgeInsets.only(left: 6, right: 12.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text(localSchemes[index].scheme.name ?? ''), - Text('456'), - ], + child: DefaultTextStyle( + style: context.t.textTheme.bodyText2!.copyWith( + color: _selectedIndex == index ? Colors.white : null, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text(localSchemes[index].scheme.name ?? ''), + Text('456'), + ], + ), ), ), ), diff --git a/app/lib/widgets/language_switcher.dart b/app/lib/widgets/language_switcher.dart index 16db130..e98317d 100644 --- a/app/lib/widgets/language_switcher.dart +++ b/app/lib/widgets/language_switcher.dart @@ -1,4 +1,3 @@ -import 'package:collection/collection.dart'; 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'; @@ -6,7 +5,6 @@ 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/local_schemes_provider.dart'; import 'package:dde_gesture_manager/utils/helper.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:window_manager/window_manager.dart'; @@ -18,7 +16,7 @@ class LanguageSwitcher extends StatelessWidget { @override Widget build(BuildContext context) { var _locale = EasyLocalization.of(context)?.currentLocale; - var _supportedLocale = supportedLocales.firstWhereOrNull((element) => element == _locale); + var _supportedLocale = getSupportedLocale(_locale) ?? SupportedLocale.zh_CN; return PopupMenuButton( tooltip: LocaleKeys.language_tip.tr(), @@ -31,33 +29,29 @@ class LanguageSwitcher extends StatelessWidget { ), ], ), - itemBuilder: (BuildContext context) => supportedLocales + initialValue: _supportedLocale, + onSelected: (value) { + EasyLocalization.of(context)?.setLocale(transformSupportedLocale(value)).then((_) { + var localeMap = Translations(CodegenLoader.mapLocales[context.locale.toString()]!); + if (!kIsWeb) WindowManager.instance.setTitle(localeMap.get(LocaleKeys.app_name)!); + var localSchemesProvider = context.read(); + var schemes = localSchemesProvider.schemes!; + var newSchemes = [ + schemes.first + ..scheme.name = localeMap.get(LocaleKeys.local_manager_default_scheme_label) + ..scheme.description = localeMap.get(LocaleKeys.local_manager_default_scheme_description), + ...schemes.skip(1), + ]; + localSchemesProvider.setProps(schemes: newSchemes); + }); + H().sp.setInt(SPKeys.userLanguage, value.index); + }, + itemBuilder: (BuildContext context) => SupportedLocale.values .map( - (locale) => PopupMenuItem( - value: SupportedLocale.zh_CN, - child: ListTile( - leading: Visibility( - child: Icon(CupertinoIcons.check_mark), - visible: _supportedLocale == locale, - ), - title: Text(supportedLocaleNames[SupportedLocale.values[supportedLocales.indexOf(locale)]] ?? ''), - ), - onTap: () { - EasyLocalization.of(context)?.setLocale(locale).then((_) { - var localeMap = Translations(CodegenLoader.mapLocales[context.locale.toString()]!); - if (!kIsWeb) WindowManager.instance.setTitle(localeMap.get(LocaleKeys.app_name)!); - var localSchemesProvider = context.read(); - var schemes = localSchemesProvider.schemes!; - var newSchemes = [ - schemes.first - ..scheme.name = localeMap.get(LocaleKeys.local_manager_default_scheme_label) - ..scheme.description = localeMap.get(LocaleKeys.local_manager_default_scheme_description), - ...schemes.skip(1), - ]; - localSchemesProvider.setProps(schemes: newSchemes); - }); - H().sp.setInt(SPKeys.userLanguage, supportedLocales.indexOf(locale)); - }, + (supportedLocale) => CheckedPopupMenuItem( + value: supportedLocale, + checked: EasyLocalization.of(context)?.locale == transformSupportedLocale(supportedLocale), + child: Text(supportedLocaleNames[supportedLocale] ?? ''), ), ) .toList(), diff --git a/app/lib/widgets/theme_switcher.dart b/app/lib/widgets/theme_switcher.dart index a0f4df8..3ad2537 100644 --- a/app/lib/widgets/theme_switcher.dart +++ b/app/lib/widgets/theme_switcher.dart @@ -11,7 +11,7 @@ class ThemeSwitcher extends StatelessWidget { @override Widget build(BuildContext context) { var _brightnessMode = context.watch().brightnessMode; - return PopupMenuButton( + return PopupMenuButton( initialValue: _brightnessMode, child: Row( children: [ @@ -23,35 +23,23 @@ class ThemeSwitcher extends StatelessWidget { ], ), padding: EdgeInsets.zero, + onSelected: (value) => context.read().setProps(brightnessMode: value), tooltip: LocaleKeys.theme_tip.tr(), itemBuilder: (BuildContext context) => [ - PopupMenuItem( - child: ListTile( - leading: Visibility( - child: Icon(CupertinoIcons.check_mark), - visible: _brightnessMode == BrightnessMode.system, - ), - title: Text(LocaleKeys.theme_system).tr(), - ), - onTap: () => context.read().setProps(brightnessMode: BrightnessMode.system), + CheckedPopupMenuItem( + child: Text(LocaleKeys.theme_system).tr(), + checked: _brightnessMode == BrightnessMode.system, + value: BrightnessMode.system, ), - PopupMenuItem( - child: ListTile( - leading: Visibility( - child: Icon(CupertinoIcons.check_mark), - visible: _brightnessMode == BrightnessMode.light, - ), - title: Text(LocaleKeys.theme_light).tr()), - onTap: () => context.read().setProps(brightnessMode: BrightnessMode.light), + CheckedPopupMenuItem( + child: Text(LocaleKeys.theme_light).tr(), + checked: _brightnessMode == BrightnessMode.light, + value: BrightnessMode.light, ), - PopupMenuItem( - child: ListTile( - leading: Visibility( - child: Icon(CupertinoIcons.check_mark), - visible: _brightnessMode == BrightnessMode.dark, - ), - title: Text(LocaleKeys.theme_dark).tr()), - onTap: () => context.read().setProps(brightnessMode: BrightnessMode.dark), + CheckedPopupMenuItem( + child: Text(LocaleKeys.theme_dark).tr(), + checked: _brightnessMode == BrightnessMode.dark, + value: BrightnessMode.dark, ), ], );