opt: theme type

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2024-11-28 13:11:29 +08:00
parent abdc4acd61
commit 25fc85bd3a
10 changed files with 54 additions and 87 deletions

View File

@@ -1,3 +1,4 @@
import 'package:PiliPalaX/utils/global_data.dart';
import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart';
@@ -21,6 +22,9 @@ class MineController extends GetxController {
static bool anonymity =
GStorage.setting.get(SettingBoxKey.anonymity, defaultValue: false);
ThemeType get nextThemeType =>
ThemeType.values[(themeType.value.index + 1) % ThemeType.values.length];
@override
onInit() {
super.onInit();
@@ -30,8 +34,7 @@ class MineController extends GetxController {
userLogin.value = true;
}
themeType.value = ThemeType.values[setting.get(SettingBoxKey.themeMode,
defaultValue: ThemeType.system.code)];
// themeType.value = ThemeType.values[GlobalData().themeMode];
// anonymity = setting.get(SettingBoxKey.anonymity, defaultValue: false);
}
@@ -190,44 +193,9 @@ class MineController extends GetxController {
}
onChangeTheme() {
ThemeType currentTheme = themeType.value;
//system -> dark -> light -> system
switch (currentTheme) {
case ThemeType.system:
setting.put(SettingBoxKey.themeMode, ThemeType.dark.code);
themeType.value = ThemeType.dark;
break;
case ThemeType.dark:
setting.put(SettingBoxKey.themeMode, ThemeType.light.code);
themeType.value = ThemeType.light;
break;
case ThemeType.light:
setting.put(SettingBoxKey.themeMode, ThemeType.system.code);
themeType.value = ThemeType.system;
break;
}
// Brightness currentBrightness =
// MediaQuery.of(Get.context!).platformBrightness;
// switch (currentTheme) {
// case ThemeType.dark:
// setting.put(SettingBoxKey.themeMode, ThemeType.light.code);
// themeType.value = ThemeType.light;
// break;
// case ThemeType.light:
// setting.put(SettingBoxKey.themeMode, ThemeType.dark.code);
// themeType.value = ThemeType.dark;
// break;
// case ThemeType.system:
// // 判断当前的颜色模式
// if (currentBrightness == Brightness.light) {
// setting.put(SettingBoxKey.themeMode, ThemeType.dark.code);
// themeType.value = ThemeType.dark;
// } else {
// setting.put(SettingBoxKey.themeMode, ThemeType.light.code);
// themeType.value = ThemeType.light;
// }
// break;
// }
themeType.value = nextThemeType;
setting.put(SettingBoxKey.themeMode, themeType.value.code);
GlobalData().themeMode = themeType.value.code;
Get.forceAppUpdate();
}

View File

@@ -1,5 +1,6 @@
// ignore_for_file: no_leading_underscores_for_local_identifiers
import 'package:PiliPalaX/utils/global_data.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:PiliPalaX/common/constants.dart';
@@ -17,7 +18,8 @@ class MinePage extends StatefulWidget {
}
class _MinePageState extends State<MinePage> {
final MineController mineController = Get.put(MineController());
final MineController mineController = Get.put(MineController())
..themeType.value = ThemeType.values[GlobalData().themeMode];
late Future _futureBuilderFuture;
@override
@@ -86,19 +88,18 @@ class _MinePageState extends State<MinePage> {
tapTargetSize:
MaterialTapTargetSize.shrinkWrap, // the '2023' part
),
//system -> dark -> light -> system
tooltip:
'切换至${mineController.themeType.value == ThemeType.system ? '深色' : (mineController.themeType.value == ThemeType.dark ? '浅色' : '跟随系统')}主题',
onPressed: () {
mineController.onChangeTheme();
setState(() {});
},
tooltip: '切换至${switch (mineController.nextThemeType) {
ThemeType.light => '浅色',
ThemeType.dark => '深色',
ThemeType.system => '跟随系统',
}}主题',
onPressed: mineController.onChangeTheme,
icon: Icon(
mineController.themeType.value == ThemeType.system
? MdiIcons.themeLightDark
: mineController.themeType.value == ThemeType.light
? MdiIcons.weatherSunny
: MdiIcons.weatherNight,
switch (mineController.themeType.value) {
ThemeType.light => MdiIcons.weatherSunny,
ThemeType.dark => MdiIcons.weatherNight,
ThemeType.system => MdiIcons.themeLightDark,
},
size: 24,
),
),