import 'package:flisp_app/utils/theme_utils.dart'; import 'package:flutter/material.dart'; import 'package:package_info_plus/package_info_plus.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'; static const List appBarTitles = ['闪灵', '待办', '日程', '统计']; int currentTab = 0; String currentAppBarTitle = '闪灵'; bool isDarkMode = false; ThemeColor currentTheme = defaultThemes[0]; String appVersion = '1.0.0'; String buildNumber = '1'; late SharedPreferences _prefs; bool isInitialized = false; AppProvider() { _initPreferences(); } // 初始化 SharedPreferences Future _initPreferences() async { _prefs = await SharedPreferences.getInstance(); _loadPreferences(); await _getVersionInfo(); isInitialized = true; notifyListeners(); } // 加载存储的设置 void _loadPreferences() { isDarkMode = _prefs.getBool(_darkModeKey) ?? false; // 加载主题色 final themeName = _prefs.getString(_themeKey); if (themeName != null) { currentTheme = getThemeColor(themeName); } } Future _getVersionInfo() async { try { PackageInfo packageInfo = await PackageInfo.fromPlatform(); appVersion = packageInfo.version; buildNumber = packageInfo.buildNumber; notifyListeners(); } catch (e) { print('获取版本信息失败: $e'); } } // 保存主题色 Future _saveTheme() async { await _prefs.setString(_themeKey, currentTheme.name); } // 保存暗黑模式 Future _saveDarkMode() async { await _prefs.setBool(_darkModeKey, isDarkMode); } List get availableThemes => defaultThemes; String get fullVersion => '$appVersion+$buildNumber'; void changeTab(int index) { currentTab = index; currentAppBarTitle = appBarTitles[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', ); } }