| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- import 'package:flutter/material.dart';
- import 'package:flutter/scheduler.dart';
- import 'package:get/get.dart';
- import '../../../app/data/sp/ix_sp.dart';
- import '../ix_theme.dart';
- /// 响应式主题扩展
- /// 支持三种模式:system(跟随系统)、dark、light
- class ReactiveTheme {
- static final RxBool _isLightTheme = true.obs;
- /// 初始化主题状态
- static void init() {
- _updateThemeFromMode();
- }
- /// 根据当前模式更新主题
- static void _updateThemeFromMode() {
- final mode = IXSP.getThemeMode();
- bool isLight;
- switch (mode) {
- case 'light':
- isLight = true;
- break;
- case 'dark':
- isLight = false;
- break;
- case 'system':
- default:
- // 跟随系统
- final brightness =
- SchedulerBinding.instance.platformDispatcher.platformBrightness;
- isLight = brightness == Brightness.light;
- break;
- }
- _isLightTheme.value = isLight;
- }
- /// 获取当前主题状态
- static bool get isLightTheme => _isLightTheme.value;
- /// 获取初始 ThemeMode(用于 GetMaterialApp)
- static ThemeMode get initialThemeMode {
- final mode = IXSP.getThemeMode();
- switch (mode) {
- case 'light':
- return ThemeMode.light;
- case 'dark':
- return ThemeMode.dark;
- case 'system':
- default:
- return ThemeMode.system;
- }
- }
- /// 切换主题(legacy,保持兼容)
- static void toggleTheme() {
- _isLightTheme.value = !_isLightTheme.value;
- IXSP.setThemeIsLight(_isLightTheme.value);
- Get.changeThemeMode(_isLightTheme.value ? ThemeMode.light : ThemeMode.dark);
- }
- /// 设置主题模式
- static void setThemeMode(String mode) {
- IXSP.setThemeMode(mode);
- ThemeMode themeMode;
- bool isLight;
- switch (mode) {
- case 'light':
- themeMode = ThemeMode.light;
- isLight = true;
- break;
- case 'dark':
- themeMode = ThemeMode.dark;
- isLight = false;
- break;
- case 'system':
- default:
- themeMode = ThemeMode.system;
- final brightness =
- SchedulerBinding.instance.platformDispatcher.platformBrightness;
- isLight = brightness == Brightness.light;
- break;
- }
- _isLightTheme.value = isLight;
- IXSP.setThemeIsLight(isLight);
- Get.changeThemeMode(themeMode);
- }
- /// 设置主题(legacy,保持兼容)
- static void setTheme(bool isLight) {
- if (_isLightTheme.value != isLight) {
- _isLightTheme.value = isLight;
- IXSP.setThemeIsLight(isLight);
- Get.changeThemeMode(isLight ? ThemeMode.light : ThemeMode.dark);
- }
- }
- /// 响应式主题数据
- static ThemeData get theme =>
- IXTheme.getThemeData(isLight: _isLightTheme.value);
- }
- /// 扩展 GetX,添加响应式主题方法
- extension GetXThemeExtension on GetInterface {
- /// 响应式主题数据
- ThemeData get reactiveTheme => ReactiveTheme.theme;
- }
|