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

@@ -104,9 +104,6 @@ class MyApp extends StatelessWidget {
colorThemeTypes[setting.get(SettingBoxKey.customColor, defaultValue: 0)] colorThemeTypes[setting.get(SettingBoxKey.customColor, defaultValue: 0)]
['color']; ['color'];
Color brandColor = defaultColor; Color brandColor = defaultColor;
// 主题模式
// ThemeType currentThemeValue = ThemeType.values[setting
// .get(SettingBoxKey.themeMode, defaultValue: ThemeType.system.code)];
// 是否动态取色 // 是否动态取色
bool isDynamicColor = bool isDynamicColor =
setting.get(SettingBoxKey.dynamicColor, defaultValue: true); setting.get(SettingBoxKey.dynamicColor, defaultValue: true);

View File

@@ -33,13 +33,13 @@ class _HomePageState extends State<HomePage>
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
super.build(context); super.build(context);
Brightness currentBrightness = MediaQuery.of(context).platformBrightness; // Brightness currentBrightness = MediaQuery.of(context).platformBrightness;
// 设置状态栏图标的亮度 // 设置状态栏图标的亮度
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle( // SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
statusBarIconBrightness: currentBrightness == Brightness.light // statusBarIconBrightness: currentBrightness == Brightness.light
? Brightness.dark // ? Brightness.dark
: Brightness.light, // : Brightness.light,
)); // ));
return Scaffold( return Scaffold(
appBar: AppBar(toolbarHeight: 0), appBar: AppBar(toolbarHeight: 0),
body: Column( body: Column(

View File

@@ -1,3 +1,5 @@
import 'dart:ui';
import 'package:PiliPalaX/common/widgets/network_img_layer.dart'; import 'package:PiliPalaX/common/widgets/network_img_layer.dart';
import 'package:PiliPalaX/models/space/card.dart' as space; import 'package:PiliPalaX/models/space/card.dart' as space;
import 'package:PiliPalaX/models/space/images.dart' as space; import 'package:PiliPalaX/models/space/images.dart' as space;

View File

@@ -1,3 +1,4 @@
import 'package:PiliPalaX/utils/global_data.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@@ -21,6 +22,9 @@ class MineController extends GetxController {
static bool anonymity = static bool anonymity =
GStorage.setting.get(SettingBoxKey.anonymity, defaultValue: false); GStorage.setting.get(SettingBoxKey.anonymity, defaultValue: false);
ThemeType get nextThemeType =>
ThemeType.values[(themeType.value.index + 1) % ThemeType.values.length];
@override @override
onInit() { onInit() {
super.onInit(); super.onInit();
@@ -30,8 +34,7 @@ class MineController extends GetxController {
userLogin.value = true; userLogin.value = true;
} }
themeType.value = ThemeType.values[setting.get(SettingBoxKey.themeMode, // themeType.value = ThemeType.values[GlobalData().themeMode];
defaultValue: ThemeType.system.code)];
// anonymity = setting.get(SettingBoxKey.anonymity, defaultValue: false); // anonymity = setting.get(SettingBoxKey.anonymity, defaultValue: false);
} }
@@ -190,44 +193,9 @@ class MineController extends GetxController {
} }
onChangeTheme() { onChangeTheme() {
ThemeType currentTheme = themeType.value; themeType.value = nextThemeType;
//system -> dark -> light -> system setting.put(SettingBoxKey.themeMode, themeType.value.code);
switch (currentTheme) { GlobalData().themeMode = themeType.value.code;
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;
// }
Get.forceAppUpdate(); Get.forceAppUpdate();
} }

View File

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

View File

@@ -1,3 +1,4 @@
import 'package:PiliPalaX/utils/global_data.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
@@ -43,8 +44,7 @@ class SettingController extends GetxController {
setting.get(SettingBoxKey.defaultToastOp, defaultValue: 1.0); setting.get(SettingBoxKey.defaultToastOp, defaultValue: 1.0);
picQuality.value = picQuality.value =
setting.get(SettingBoxKey.defaultPicQa, defaultValue: 10); setting.get(SettingBoxKey.defaultPicQa, defaultValue: 10);
themeType.value = ThemeType.values[setting.get(SettingBoxKey.themeMode, themeType.value = ThemeType.values[GlobalData().themeMode];
defaultValue: ThemeType.system.code)];
dynamicBadgeType.value = DynamicBadgeMode.values[setting.get( dynamicBadgeType.value = DynamicBadgeMode.values[setting.get(
SettingBoxKey.dynamicBadgeMode, SettingBoxKey.dynamicBadgeMode,
defaultValue: DynamicBadgeMode.number.code)]; defaultValue: DynamicBadgeMode.number.code)];

View File

@@ -308,6 +308,7 @@ class _StyleSettingState extends State<StyleSetting> {
_tempThemeValue = result; _tempThemeValue = result;
settingController.themeType.value = result; settingController.themeType.value = result;
setting.put(SettingBoxKey.themeMode, result.index); setting.put(SettingBoxKey.themeMode, result.index);
GlobalData().themeMode = result.index;
Get.forceAppUpdate(); Get.forceAppUpdate();
} }
}, },

View File

@@ -1,7 +1,6 @@
import 'dart:async'; import 'dart:async';
import 'dart:math'; import 'dart:math';
import 'package:PiliPalaX/grpc/grpc_repo.dart';
import 'package:PiliPalaX/http/loading_state.dart'; import 'package:PiliPalaX/http/loading_state.dart';
import 'package:PiliPalaX/utils/utils.dart'; import 'package:PiliPalaX/utils/utils.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';

View File

@@ -1,6 +1,8 @@
class GlobalData { class GlobalData {
int imgQuality = 10; int imgQuality = 10;
int themeMode = 2;
// 私有构造函数 // 私有构造函数
GlobalData._(); GlobalData._();

View File

@@ -103,29 +103,19 @@ class GStorage {
.values[setting.get(SettingBoxKey.memberTab, defaultValue: 0)]; .values[setting.get(SettingBoxKey.memberTab, defaultValue: 0)];
static ThemeMode get themeMode { static ThemeMode get themeMode {
switch (setting.get(SettingBoxKey.themeMode, return switch (GlobalData().themeMode) {
defaultValue: ThemeType.system.code)) { 0 => ThemeMode.light,
case 0: 1 => ThemeMode.dark,
return ThemeMode.light; _ => ThemeMode.system
case 1: };
return ThemeMode.dark;
case 2:
default:
return ThemeMode.system;
}
} }
static Brightness get brightness { static Brightness get brightness {
switch (setting.get(SettingBoxKey.themeMode, return switch (GlobalData().themeMode) {
defaultValue: ThemeType.system.code)) { 0 => Brightness.light,
case 0: 1 => Brightness.dark,
return Brightness.light; _ => PlatformDispatcher.instance.platformBrightness
case 1: };
return Brightness.dark;
case 2:
default:
return PlatformDispatcher.instance.platformBrightness;
}
} }
static Future<void> init() async { static Future<void> init() async {
@@ -158,8 +148,15 @@ class GStorage {
); );
// 视频设置 // 视频设置
video = await Hive.openBox('video'); video = await Hive.openBox('video');
GlobalData().imgQuality = // 设置全局变量
setting.get(SettingBoxKey.defaultPicQa, defaultValue: 10); // 设置全局变量 GlobalData().imgQuality = setting.get(
SettingBoxKey.defaultPicQa,
defaultValue: 10,
);
GlobalData().themeMode = setting.get(
SettingBoxKey.themeMode,
defaultValue: ThemeType.system.code,
);
} }
static Future<String> exportAllSettings() async { static Future<String> exportAllSettings() async {