diff --git a/lib/main.dart b/lib/main.dart index bbe34a8c6..1c4e00959 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -104,9 +104,6 @@ class MyApp extends StatelessWidget { colorThemeTypes[setting.get(SettingBoxKey.customColor, defaultValue: 0)] ['color']; Color brandColor = defaultColor; - // 主题模式 - // ThemeType currentThemeValue = ThemeType.values[setting - // .get(SettingBoxKey.themeMode, defaultValue: ThemeType.system.code)]; // 是否动态取色 bool isDynamicColor = setting.get(SettingBoxKey.dynamicColor, defaultValue: true); diff --git a/lib/pages/home/view.dart b/lib/pages/home/view.dart index 954efce64..2ec69e912 100644 --- a/lib/pages/home/view.dart +++ b/lib/pages/home/view.dart @@ -33,13 +33,13 @@ class _HomePageState extends State @override Widget build(BuildContext context) { super.build(context); - Brightness currentBrightness = MediaQuery.of(context).platformBrightness; + // Brightness currentBrightness = MediaQuery.of(context).platformBrightness; // 设置状态栏图标的亮度 - SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle( - statusBarIconBrightness: currentBrightness == Brightness.light - ? Brightness.dark - : Brightness.light, - )); + // SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle( + // statusBarIconBrightness: currentBrightness == Brightness.light + // ? Brightness.dark + // : Brightness.light, + // )); return Scaffold( appBar: AppBar(toolbarHeight: 0), body: Column( diff --git a/lib/pages/member/new/widget/user_info_card.dart b/lib/pages/member/new/widget/user_info_card.dart index de15a2f01..017a806c1 100644 --- a/lib/pages/member/new/widget/user_info_card.dart +++ b/lib/pages/member/new/widget/user_info_card.dart @@ -1,3 +1,5 @@ +import 'dart:ui'; + import 'package:PiliPalaX/common/widgets/network_img_layer.dart'; import 'package:PiliPalaX/models/space/card.dart' as space; import 'package:PiliPalaX/models/space/images.dart' as space; diff --git a/lib/pages/mine/controller.dart b/lib/pages/mine/controller.dart index f434e43d6..3fcdd2e85 100644 --- a/lib/pages/mine/controller.dart +++ b/lib/pages/mine/controller.dart @@ -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(); } diff --git a/lib/pages/mine/view.dart b/lib/pages/mine/view.dart index 83f062d47..bad04fec3 100644 --- a/lib/pages/mine/view.dart +++ b/lib/pages/mine/view.dart @@ -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 { - 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 { 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, ), ), diff --git a/lib/pages/setting/controller.dart b/lib/pages/setting/controller.dart index 36f63e6ea..6c5efe9f4 100644 --- a/lib/pages/setting/controller.dart +++ b/lib/pages/setting/controller.dart @@ -1,3 +1,4 @@ +import 'package:PiliPalaX/utils/global_data.dart'; import 'package:flutter/material.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.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); picQuality.value = setting.get(SettingBoxKey.defaultPicQa, defaultValue: 10); - themeType.value = ThemeType.values[setting.get(SettingBoxKey.themeMode, - defaultValue: ThemeType.system.code)]; + themeType.value = ThemeType.values[GlobalData().themeMode]; dynamicBadgeType.value = DynamicBadgeMode.values[setting.get( SettingBoxKey.dynamicBadgeMode, defaultValue: DynamicBadgeMode.number.code)]; diff --git a/lib/pages/setting/style_setting.dart b/lib/pages/setting/style_setting.dart index e84c7f6fb..c0b4519b8 100644 --- a/lib/pages/setting/style_setting.dart +++ b/lib/pages/setting/style_setting.dart @@ -308,6 +308,7 @@ class _StyleSettingState extends State { _tempThemeValue = result; settingController.themeType.value = result; setting.put(SettingBoxKey.themeMode, result.index); + GlobalData().themeMode = result.index; Get.forceAppUpdate(); } }, diff --git a/lib/pages/video/detail/introduction/controller.dart b/lib/pages/video/detail/introduction/controller.dart index 9178e8a1a..937903399 100644 --- a/lib/pages/video/detail/introduction/controller.dart +++ b/lib/pages/video/detail/introduction/controller.dart @@ -1,7 +1,6 @@ import 'dart:async'; import 'dart:math'; -import 'package:PiliPalaX/grpc/grpc_repo.dart'; import 'package:PiliPalaX/http/loading_state.dart'; import 'package:PiliPalaX/utils/utils.dart'; import 'package:flutter/material.dart'; diff --git a/lib/utils/global_data.dart b/lib/utils/global_data.dart index a8a04ebae..b0661c826 100644 --- a/lib/utils/global_data.dart +++ b/lib/utils/global_data.dart @@ -1,6 +1,8 @@ class GlobalData { int imgQuality = 10; + int themeMode = 2; + // 私有构造函数 GlobalData._(); diff --git a/lib/utils/storage.dart b/lib/utils/storage.dart index ca931c1a1..af7c2ba32 100644 --- a/lib/utils/storage.dart +++ b/lib/utils/storage.dart @@ -103,29 +103,19 @@ class GStorage { .values[setting.get(SettingBoxKey.memberTab, defaultValue: 0)]; static ThemeMode get themeMode { - switch (setting.get(SettingBoxKey.themeMode, - defaultValue: ThemeType.system.code)) { - case 0: - return ThemeMode.light; - case 1: - return ThemeMode.dark; - case 2: - default: - return ThemeMode.system; - } + return switch (GlobalData().themeMode) { + 0 => ThemeMode.light, + 1 => ThemeMode.dark, + _ => ThemeMode.system + }; } static Brightness get brightness { - switch (setting.get(SettingBoxKey.themeMode, - defaultValue: ThemeType.system.code)) { - case 0: - return Brightness.light; - case 1: - return Brightness.dark; - case 2: - default: - return PlatformDispatcher.instance.platformBrightness; - } + return switch (GlobalData().themeMode) { + 0 => Brightness.light, + 1 => Brightness.dark, + _ => PlatformDispatcher.instance.platformBrightness + }; } static Future init() async { @@ -158,8 +148,15 @@ class GStorage { ); // 视频设置 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 exportAllSettings() async {