import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:shared_preferences/shared_preferences.dart'; /// 全局主题管理 Cubit(仿 LocaleCubit 模式) /// 支持 light / dark / system 三态,持久化到 SharedPreferences class ThemeCubit extends Cubit { static const String _themeKey = 'app_theme_mode'; ThemeCubit() : super(ThemeMode.light) { _loadSavedThemeMode(); } /// 从本地存储恢复上次保存的主题模式 Future _loadSavedThemeMode() async { try { final prefs = await SharedPreferences.getInstance(); final saved = prefs.getString(_themeKey); emit(_parseThemeMode(saved)); } catch (e) { emit(ThemeMode.light); } } /// 设置主题模式并持久化 Future setThemeMode(ThemeMode mode) async { try { final prefs = await SharedPreferences.getInstance(); await prefs.setString(_themeKey, mode.name); emit(mode); } catch (e) { debugPrint('❌ [ThemeCubit] 保存主题设置失败: $e'); } } /// 夜间模式开关(Switch 二态切换,不涉及跟随系统) Future toggleDarkMode(bool enabled) => setThemeMode(enabled ? ThemeMode.dark : ThemeMode.light); /// 当前是否为深色模式 bool get isDarkMode => state == ThemeMode.dark; /// 将持久化的字符串解析为 ThemeMode ThemeMode _parseThemeMode(String? saved) { switch (saved) { case 'dark': return ThemeMode.dark; case 'system': return ThemeMode.system; default: return ThemeMode.light; } } }