opt: change theme

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-04-16 22:12:24 +08:00
parent c4e7263ed6
commit cb6ead96d1
5 changed files with 37 additions and 30 deletions

View File

@@ -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,
};
}

View File

@@ -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() {

View File

@@ -55,33 +55,27 @@ class _MinePageState extends State<MinePage> {
size: 24,
),
),
IconButton(
Obx(
() {
return 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 => '跟随系统',
}}主题',
tooltip: '切换至${_mineController.nextThemeType.description}主题',
onPressed: _mineController.onChangeTheme,
icon: Icon(
switch (_mineController.themeType.value) {
ThemeType.light => MdiIcons.weatherSunny,
ThemeType.dark => MdiIcons.weatherNight,
ThemeType.system => MdiIcons.themeLightDark,
},
_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

View File

@@ -69,7 +69,7 @@ class _ColorSelectPageState extends State<ColorSelectPage> {
if (result != null) {
ctr.themeType.value = result;
GStorage.setting.put(SettingBoxKey.themeMode, result.index);
Get.forceAppUpdate();
Get.changeThemeMode(result.toThemeMode);
}
},
leading: Container(

View File

@@ -538,7 +538,7 @@ List<SettingsModel> 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),