import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:shared_preferences/shared_preferences.dart'; const _kThemeMode = 'app_theme_mode'; const _kNotificationsEnabled = 'app_notifications_enabled'; String _themeToStr(ThemeMode m) { return switch (m) { ThemeMode.light => 'light', _ => 'system', }; } ThemeMode _themeFromStr(String? s) { return switch (s) { 'light' => ThemeMode.light, // Legacy: app no longer offers dark; map old saves to light. 'dark' => ThemeMode.light, _ => ThemeMode.system, }; } final themeModeProvider = NotifierProvider(ThemeModeNotifier.new); class ThemeModeNotifier extends Notifier { @override ThemeMode build() { Future.microtask(_load); return ThemeMode.system; } Future _load() async { final p = await SharedPreferences.getInstance(); final s = p.getString(_kThemeMode); if (s != null) { state = _themeFromStr(s); } } Future setThemeMode(ThemeMode mode) async { state = mode; final p = await SharedPreferences.getInstance(); await p.setString(_kThemeMode, _themeToStr(mode)); } } final notificationsEnabledProvider = NotifierProvider(NotificationsEnabledNotifier.new); class NotificationsEnabledNotifier extends Notifier { @override bool build() { Future.microtask(_load); return true; } Future _load() async { final p = await SharedPreferences.getInstance(); if (p.containsKey(_kNotificationsEnabled)) { state = p.getBool(_kNotificationsEnabled) ?? true; } } Future setEnabled(bool value) async { state = value; final p = await SharedPreferences.getInstance(); await p.setBool(_kNotificationsEnabled, value); } } /// Reads persisted value (default true if never set). Use before first notifier tick if needed. Future readNotificationsEnabledFromPrefs() async { final p = await SharedPreferences.getInstance(); if (!p.containsKey(_kNotificationsEnabled)) return true; return p.getBool(_kNotificationsEnabled) ?? true; }