| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- import 'package:flutter/material.dart';
- import 'package:flutter/scheduler.dart';
- import 'package:get/get.dart';
- import '../../../../config/translations/strings_enum.dart';
- import '../../../data/sp/ix_sp.dart';
- /// 主题模式信息
- class ThemeModeInfo {
- final String code; // 'system', 'dark', 'light'
- final String name;
- ThemeModeInfo({required this.code, required this.name});
- }
- class ThemeController extends GetxController {
- /// 当前选中的主题模式
- final selectedMode = 'system'.obs;
- /// 主题模式列表
- List<ThemeModeInfo> get themeModes => [
- ThemeModeInfo(code: 'system', name: Strings.followSystem.tr),
- ThemeModeInfo(code: 'dark', name: Strings.darkMode.tr),
- ThemeModeInfo(code: 'light', name: Strings.lightMode.tr),
- ];
- @override
- void onInit() {
- super.onInit();
- // 加载当前主题模式
- selectedMode.value = IXSP.getThemeMode();
- }
- /// 选择主题模式
- void selectThemeMode(String mode) {
- if (selectedMode.value == mode) return;
- selectedMode.value = mode;
- IXSP.setThemeMode(mode);
- // 应用主题
- _applyTheme(mode);
- }
- /// 应用主题
- void _applyTheme(String 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;
- }
- // 更新 GetX 主题
- Get.changeThemeMode(themeMode);
- // 同步更新 legacy 的 isLight 标记(兼容旧代码)
- IXSP.setThemeIsLight(isLight);
- }
- }
|