import 'dart:async'; import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:shared_preferences/shared_preferences.dart'; const _themeModeKey = 'theme_mode'; final themeModeProvider = StateNotifierProvider( (ref) => ThemeModeController(), ); class ThemeModeController extends StateNotifier { ThemeModeController() : super(ThemeMode.system) { unawaited(_loadSavedMode()); } Future _loadSavedMode() async { final prefs = await SharedPreferences.getInstance(); final raw = prefs.getString(_themeModeKey); if (raw == null) return; state = _decode(raw); } Future setMode(ThemeMode mode) async { state = mode; final prefs = await SharedPreferences.getInstance(); await prefs.setString(_themeModeKey, _encode(mode)); } ThemeMode _decode(String raw) => switch (raw) { 'light' => ThemeMode.light, 'dark' => ThemeMode.dark, _ => ThemeMode.system, }; String _encode(ThemeMode mode) => switch (mode) { ThemeMode.light => 'light', ThemeMode.dark => 'dark', ThemeMode.system => 'system', }; }