diff --git a/lib/models/common/theme_type.dart b/lib/models/common/theme_type.dart index d2dac752..6ec0ad84 100644 --- a/lib/models/common/theme_type.dart +++ b/lib/models/common/theme_type.dart @@ -1,13 +1,26 @@ +import 'package:flutter/material.dart'; +import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; + enum ThemeType { light, dark, system, } -extension ThemeTypeDesc on ThemeType { +extension ThemeTypeExt on ThemeType { String get description => ['浅色', '深色', '跟随系统'][index]; -} -extension ThemeTypeCode on ThemeType { - int get code => [0, 1, 2][index]; + int get code => index; + + ThemeMode get toThemeMode => switch (this) { + ThemeType.light => ThemeMode.light, + ThemeType.dark => ThemeMode.dark, + ThemeType.system => ThemeMode.system, + }; + + IconData get iconData => switch (this) { + ThemeType.light => MdiIcons.weatherSunny, + ThemeType.dark => MdiIcons.weatherNight, + ThemeType.system => MdiIcons.themeLightDark, + }; } diff --git a/lib/pages/mine/controller.dart b/lib/pages/mine/controller.dart index e519c372..9254cf89 100644 --- a/lib/pages/mine/controller.dart +++ b/lib/pages/mine/controller.dart @@ -201,7 +201,7 @@ class MineController extends GetxController { onChangeTheme() { themeType.value = nextThemeType; setting.put(SettingBoxKey.themeMode, themeType.value.code); - Get.forceAppUpdate(); + Get.changeThemeMode(themeType.value.toThemeMode); } pushFollow() { diff --git a/lib/pages/mine/view.dart b/lib/pages/mine/view.dart index bed39813..fe756367 100644 --- a/lib/pages/mine/view.dart +++ b/lib/pages/mine/view.dart @@ -55,33 +55,27 @@ class _MinePageState extends State { size: 24, ), ), - IconButton( - iconSize: 40.0, - padding: const EdgeInsets.all(8), - constraints: const BoxConstraints(), - style: const ButtonStyle( - tapTargetSize: - MaterialTapTargetSize.shrinkWrap, // the '2023' part - ), - tooltip: '切换至${switch (_mineController.nextThemeType) { - ThemeType.light => '浅色', - ThemeType.dark => '深色', - ThemeType.system => '跟随系统', - }}主题', - onPressed: _mineController.onChangeTheme, - icon: Icon( - switch (_mineController.themeType.value) { - ThemeType.light => MdiIcons.weatherSunny, - ThemeType.dark => MdiIcons.weatherNight, - ThemeType.system => MdiIcons.themeLightDark, - }, - size: 24, - ), + Obx( + () { + return IconButton( + iconSize: 40.0, + padding: const EdgeInsets.all(8), + style: const ButtonStyle( + tapTargetSize: + MaterialTapTargetSize.shrinkWrap, // the '2023' part + ), + tooltip: '切换至${_mineController.nextThemeType.description}主题', + onPressed: _mineController.onChangeTheme, + icon: Icon( + _mineController.themeType.value.iconData, + size: 24, + ), + ); + }, ), IconButton( iconSize: 40.0, padding: const EdgeInsets.all(8), - constraints: const BoxConstraints(), style: const ButtonStyle( tapTargetSize: MaterialTapTargetSize.shrinkWrap, // the '2023' part diff --git a/lib/pages/setting/pages/color_select.dart b/lib/pages/setting/pages/color_select.dart index 96297ff9..779bb711 100644 --- a/lib/pages/setting/pages/color_select.dart +++ b/lib/pages/setting/pages/color_select.dart @@ -69,7 +69,7 @@ class _ColorSelectPageState extends State { if (result != null) { ctr.themeType.value = result; GStorage.setting.put(SettingBoxKey.themeMode, result.index); - Get.forceAppUpdate(); + Get.changeThemeMode(result.toThemeMode); } }, leading: Container( diff --git a/lib/pages/setting/widgets/model.dart b/lib/pages/setting/widgets/model.dart index b21e6e21..a58b7833 100644 --- a/lib/pages/setting/widgets/model.dart +++ b/lib/pages/setting/widgets/model.dart @@ -538,7 +538,7 @@ List get styleSettings => [ if (result != null) { GStorage.setting.put(SettingBoxKey.themeMode, result.index); Get.put(ColorSelectController()).themeType.value = result; - Get.forceAppUpdate(); + Get.changeThemeMode(result.toThemeMode); } }, leading: const Icon(Icons.flashlight_on_outlined),