// 设置 BLoC — 主题切换 + 应用设置管理 import 'package:flutter/material.dart'; // ===== Events ===== sealed class SettingsEvent { const SettingsEvent(); } final class SettingsThemeChanged extends SettingsEvent { final ThemeMode themeMode; const SettingsThemeChanged(this.themeMode); } final class SettingsLoad extends SettingsEvent { const SettingsLoad(); } // ===== State ===== class SettingsState { final ThemeMode themeMode; final bool isLoading; const SettingsState({ this.themeMode = ThemeMode.system, this.isLoading = false, }); SettingsState copyWith({ThemeMode? themeMode, bool? isLoading}) => SettingsState( themeMode: themeMode ?? this.themeMode, isLoading: isLoading ?? this.isLoading, ); } // ===== BLoC ===== class SettingsBloc extends ChangeNotifier { SettingsState _state = const SettingsState(); SettingsState get state => _state; /// 切换主题模式 void changeTheme(ThemeMode mode) { _state = _state.copyWith(themeMode: mode); notifyListeners(); // TODO: 持久化到 SharedPreferences/Isar } /// 循环切换: system → light → dark → system void cycleTheme() { final next = switch (_state.themeMode) { ThemeMode.system => ThemeMode.light, ThemeMode.light => ThemeMode.dark, ThemeMode.dark => ThemeMode.system, }; changeTheme(next); } }