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 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); } }