import 'package:blog_app/utils/theme_utils.dart'; import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; class ThemeProvider with ChangeNotifier { static const String _themeKey = 'selected_theme'; static const String _darkModeKey = 'is_dark_mode'; bool isDarkMode = false; ThemeColor currentTheme = defaultThemes[0]; late SharedPreferences _prefs; bool isInitialized = false; ThemeProvider() { _initPreferences(); } // 初始化 SharedPreferences Future _initPreferences() async { _prefs = await SharedPreferences.getInstance(); _loadPreferences(); isInitialized = true; notifyListeners(); } // 加载存储的设置 void _loadPreferences() { isDarkMode = _prefs.getBool(_darkModeKey) ?? false; // 加载主题色 final themeName = _prefs.getString(_themeKey); if (themeName != null) { currentTheme = getThemeColor(themeName); } } // 保存主题色 Future _saveTheme() async { await _prefs.setString(_themeKey, currentTheme.name); } // 保存暗黑模式 Future _saveDarkMode() async { await _prefs.setBool(_darkModeKey, isDarkMode); } List get availableThemes => defaultThemes; // 切换明暗模式 void toggleDarkMode(bool value) { isDarkMode = value; _saveDarkMode(); notifyListeners(); } // 更改主题色 void changeTheme(ThemeColor theme) { currentTheme = theme; _saveTheme(); notifyListeners(); } ThemeData get currentThemeData { return ThemeData( primarySwatch: currentTheme.materialColor, colorScheme: ColorScheme.fromSeed( seedColor: currentTheme.primaryColor, brightness: isDarkMode ? Brightness.dark : Brightness.light, ), useMaterial3: true, fontFamily: 'CustomFont', ); } }