mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-05-31 08:08:19 +08:00
opt: theme type
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -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)];
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
class GlobalData {
|
class GlobalData {
|
||||||
int imgQuality = 10;
|
int imgQuality = 10;
|
||||||
|
|
||||||
|
int themeMode = 2;
|
||||||
|
|
||||||
// 私有构造函数
|
// 私有构造函数
|
||||||
GlobalData._();
|
GlobalData._();
|
||||||
|
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user