import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../../core/services/theme_service.dart'; /// Settings state class SettingsState { final ThemeMode themeMode; final bool isDarkModeAvailable; final bool isLoading; const SettingsState({ required this.themeMode, required this.isDarkModeAvailable, this.isLoading = false, }); SettingsState copyWith({ ThemeMode? themeMode, bool? isDarkModeAvailable, bool? isLoading, }) { return SettingsState( themeMode: themeMode ?? this.themeMode, isDarkModeAvailable: isDarkModeAvailable ?? this.isDarkModeAvailable, isLoading: isLoading ?? this.isLoading, ); } } /// Settings notifier class SettingsNotifier extends StateNotifier { SettingsNotifier() : super( SettingsState( themeMode: ThemeService.getThemeMode(), isDarkModeAvailable: ThemeService.isDarkModeAvailable(), ), ); /// Set theme mode Future setThemeMode(ThemeMode themeMode) async { state = state.copyWith(isLoading: true); await ThemeService.setThemeMode(themeMode); state = state.copyWith(themeMode: themeMode, isLoading: false); } /// Load settings from storage Future loadSettings() async { state = state.copyWith(isLoading: true); final themeMode = await ThemeService.getStoredThemeMode(); final isDarkModeAvailable = ThemeService.isDarkModeAvailable(); state = state.copyWith( themeMode: themeMode, isDarkModeAvailable: isDarkModeAvailable, isLoading: false, ); } /// Reset settings to default Future resetSettings() async { state = state.copyWith(isLoading: true); await ThemeService.resetTheme(); state = state.copyWith( themeMode: ThemeService.getThemeMode(), isLoading: false, ); } } /// Settings provider final settingsProvider = StateNotifierProvider( (ref) => SettingsNotifier(), ); /// Theme mode provider (convenience) final themeModeProvider = Provider( (ref) => ref.watch(settingsProvider).themeMode, ); /// Dark mode available provider (convenience) final isDarkModeAvailableProvider = Provider( (ref) => ref.watch(settingsProvider).isDarkModeAvailable, );