import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:shared_preferences/shared_preferences.dart'; const _prefsKey = 'theme_mode'; final themeModeProvider = NotifierProvider(ThemeModeController.new); /// Persists the chosen [ThemeMode] to this device via `shared_preferences`. class ThemeModeController extends Notifier { @override ThemeMode build() { Future.microtask(_restore); return ThemeMode.system; } Future _restore() async { final prefs = await SharedPreferences.getInstance(); final saved = prefs.getString(_prefsKey); state = ThemeMode.values.asNameMap()[saved] ?? ThemeMode.system; } Future setMode(ThemeMode mode) async { state = mode; final prefs = await SharedPreferences.getInstance(); await prefs.setString(_prefsKey, mode.name); } }