import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:spotiflac_android/models/theme_settings.dart'; final initialThemeSettingsProvider = Provider( (ref) => const ThemeSettings(), ); ThemeSettings loadBootstrapThemeSettings(SharedPreferences prefs) { return ThemeSettings( themeMode: themeModeFromString(prefs.getString(kThemeModeKey)), useDynamicColor: prefs.getBool(kUseDynamicColorKey) ?? true, seedColorValue: prefs.getInt(kSeedColorKey) ?? kDefaultSeedColor, useAmoled: prefs.getBool(kUseAmoledKey) ?? false, style: themeStyleFromString(prefs.getString(kThemeStyleKey)), mornyeAccent: mornyeAccentFromString(prefs.getString(kMornyeAccentKey)), useSystemFont: prefs.getBool(kUseSystemFontKey) ?? false, ); } final themeProvider = NotifierProvider(() { return ThemeNotifier(); }); class ThemeNotifier extends Notifier { final Future _prefs = SharedPreferences.getInstance(); @override ThemeSettings build() { _loadFromStorage(); return ref.read(initialThemeSettingsProvider); } Future _loadFromStorage() async { try { final prefs = await _prefs; state = loadBootstrapThemeSettings(prefs); } catch (e) { debugPrint('Error loading theme settings: $e'); } } Future _saveToStorage() async { try { final prefs = await _prefs; await prefs.setString(kThemeModeKey, state.themeMode.name); await prefs.setBool(kUseDynamicColorKey, state.useDynamicColor); await prefs.setInt(kSeedColorKey, state.seedColorValue); await prefs.setBool(kUseAmoledKey, state.useAmoled); await prefs.setString(kThemeStyleKey, state.style.name); await prefs.setString(kMornyeAccentKey, state.mornyeAccent.name); await prefs.setBool(kUseSystemFontKey, state.useSystemFont); } catch (e) { debugPrint('Error saving theme settings: $e'); } } Future setThemeMode(ThemeMode mode) async { state = state.copyWith(themeMode: mode); await _saveToStorage(); } Future setStyle(AppThemeStyle style) async { state = state.copyWith(style: style); await _saveToStorage(); } Future setUseDynamicColor(bool value) async { state = state.copyWith(useDynamicColor: value); await _saveToStorage(); } Future setSeedColor(Color color) async { state = state.copyWith(seedColorValue: color.toARGB32()); await _saveToStorage(); } Future setSeedColorValue(int colorValue) async { state = state.copyWith(seedColorValue: colorValue); await _saveToStorage(); } Future setUseAmoled(bool value) async { state = state.copyWith(useAmoled: value); await _saveToStorage(); } Future setMornyeAccent(MornyeAccent accent) async { state = state.copyWith(mornyeAccent: accent); await _saveToStorage(); } Future setUseSystemFont(bool value) async { state = state.copyWith(useSystemFont: value); await _saveToStorage(); } }