From 3440c0bb4f413c61d70cc69abc18f08527dc0c0d Mon Sep 17 00:00:00 2001 From: orz12 Date: Sun, 7 Jul 2024 15:09:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=BB=E9=A2=98=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E6=94=AF=E6=8C=81=E5=88=87=E6=8D=A2=E8=87=B3?= =?UTF-8?q?=E3=80=90=E6=A0=B9=E6=8D=AE=E7=B3=BB=E7=BB=9F=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E3=80=91=EF=BC=8C=E5=B9=B6=E9=87=87=E7=94=A8=E6=8B=BC=E6=8E=A5?= =?UTF-8?q?=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/pages/mine/controller.dart | 43 ++++++++++----- lib/pages/mine/view.dart | 96 +++++++++++++++++++++++++++++++--- 2 files changed, 118 insertions(+), 21 deletions(-) diff --git a/lib/pages/mine/controller.dart b/lib/pages/mine/controller.dart index 3792aaba..be0c77e2 100644 --- a/lib/pages/mine/controller.dart +++ b/lib/pages/mine/controller.dart @@ -192,29 +192,44 @@ class MineController extends GetxController { } onChangeTheme() { - Brightness currentBrightness = - MediaQuery.of(Get.context!).platformBrightness; 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.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; - } + 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(); } diff --git a/lib/pages/mine/view.dart b/lib/pages/mine/view.dart index 36f2f482..b2195e39 100644 --- a/lib/pages/mine/view.dart +++ b/lib/pages/mine/view.dart @@ -9,6 +9,60 @@ import 'package:PiliPalaX/models/common/theme_type.dart'; import 'package:PiliPalaX/models/user/info.dart'; import 'controller.dart'; +class LeftClipper extends CustomClipper { + @override + Path getClip(Size size) { + Path path = Path(); + path.moveTo(0, 0); + path.lineTo(0, size.height); + path.lineTo(size.width / 2 - 2, size.height); + path.lineTo(size.width / 2 - 2, 0); + path.close(); + return path; + } + + @override + bool shouldReclip(CustomClipper oldClipper) { + return false; + } +} + +class RightClipper extends CustomClipper { + @override + Path getClip(Size size) { + Path path = Path(); + path.moveTo(size.width, size.height); + path.lineTo(size.width / 2 + 2, size.height); + path.lineTo(size.width / 2 + 2, 0); + path.lineTo(size.width, 0); + path.close(); + return path; + } + + @override + bool shouldReclip(CustomClipper oldClipper) { + return false; + } +} + +class VerticalLinePainter extends CustomPainter { + @override + void paint(Canvas canvas, Size size) { + final paint = Paint() + ..color = Colors.black.withOpacity(0.75) + ..strokeWidth = 1.2; + + canvas.drawLine( + Offset(size.width / 2, size.height-2), + Offset(size.width / 2, 3), + paint, + ); + } + + @override + bool shouldRepaint(CustomPainter oldDelegate) => false; +} + class MinePage extends StatefulWidget { const MinePage({super.key}); @@ -74,18 +128,46 @@ class _MinePageState extends State { ), ), IconButton( + //system -> dark -> light -> system tooltip: - '切换至${mineController.themeType.value == ThemeType.dark ? '浅色' : '深色'}主题', + '切换至${mineController.themeType.value == ThemeType.system ? '深色' : (mineController.themeType.value == ThemeType.dark ? '浅色' : '跟随系统')}主题', onPressed: () { mineController.onChangeTheme(); setState(() {}); }, - icon: Icon( - mineController.themeType.value == ThemeType.dark - ? CupertinoIcons.moon - : CupertinoIcons.sun_min, - size: 22, - ), + icon: mineController.themeType.value == ThemeType.system + ? SizedBox( + width: 22, + height: 22, + child: Stack( + alignment: Alignment.center, + children: [ + ClipPath( + clipper: LeftClipper(), + child: const Icon( + CupertinoIcons.moon, + size: 22, + ), + ), + ClipPath( + clipper: RightClipper(), + child: const Icon( + CupertinoIcons.sun_max, + size: 22, + ), + ), + CustomPaint( + size: const Size(22, 22), + painter: VerticalLinePainter(), + ), + ], + )) + : Icon( + mineController.themeType.value == ThemeType.dark + ? CupertinoIcons.moon + : CupertinoIcons.sun_max, + size: 22, + ), ), IconButton( tooltip: '设置',