import 'package:flisp_app/utils/theme_utils.dart'; import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; class AppProvider with ChangeNotifier { static const String _themeKey = 'selected_theme'; static const String _darkModeKey = 'is_dark_mode'; int _currentTab = 0; bool _isDarkMode = false; ThemeColor _currentTheme = defaultThemes[0]; late SharedPreferences _prefs; bool _isInitialized = false; AppProvider() { _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) { // 根据主题名称查找对应的主题 final savedTheme = defaultThemes.firstWhere( (theme) => theme.name == themeName, orElse: () => defaultThemes[0], ); _currentTheme = savedTheme; } } // 保存主题色 Future _saveTheme() async { await _prefs.setString(_themeKey, _currentTheme.name); } // 保存暗黑模式 Future _saveDarkMode() async { await _prefs.setBool(_darkModeKey, _isDarkMode); } int get currentTab => _currentTab; bool get isDarkMode => _isDarkMode; ThemeColor get currentTheme => _currentTheme; List get availableThemes => defaultThemes; bool get isInitialized => _isInitialized; void changeTab(int index) { _currentTab = index; notifyListeners(); } // 切换明暗模式 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', ); } }