import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:shared_preferences/shared_preferences.dart'; // ==================== 设置键名常量 ==================== const String _keyNotificationsEnabled = 'settings_notifications_enabled'; const String _keyDarkModeEnabled = 'settings_dark_mode_enabled'; // ==================== 消息通知设置 ==================== /// 消息通知开关状态 Provider final notificationsEnabledProvider = StateNotifierProvider((ref) { return NotificationsNotifier(); }); class NotificationsNotifier extends StateNotifier { NotificationsNotifier() : super(true) { _loadFromStorage(); } Future _loadFromStorage() async { final prefs = await SharedPreferences.getInstance(); state = prefs.getBool(_keyNotificationsEnabled) ?? true; } Future toggle() async { state = !state; final prefs = await SharedPreferences.getInstance(); await prefs.setBool(_keyNotificationsEnabled, state); } Future setEnabled(bool enabled) async { state = enabled; final prefs = await SharedPreferences.getInstance(); await prefs.setBool(_keyNotificationsEnabled, enabled); } } // ==================== 深色模式设置 ==================== /// 深色模式开关状态 Provider final darkModeEnabledProvider = StateNotifierProvider((ref) { return DarkModeNotifier(); }); class DarkModeNotifier extends StateNotifier { DarkModeNotifier() : super(false) { _loadFromStorage(); } Future _loadFromStorage() async { final prefs = await SharedPreferences.getInstance(); state = prefs.getBool(_keyDarkModeEnabled) ?? false; } Future toggle() async { state = !state; final prefs = await SharedPreferences.getInstance(); await prefs.setBool(_keyDarkModeEnabled, state); } Future setEnabled(bool enabled) async { state = enabled; final prefs = await SharedPreferences.getInstance(); await prefs.setBool(_keyDarkModeEnabled, enabled); } } // ==================== 主题模式 Provider ==================== /// 应用主题模式 Provider final themeModeProvider = Provider((ref) { final isDarkMode = ref.watch(darkModeEnabledProvider); return isDarkMode ? ThemeMode.dark : ThemeMode.light; });