theme_controller.dart 891 B

12345678910111213141516171819202122232425262728
  1. import 'package:flutter/material.dart';
  2. import 'package:shared_preferences/shared_preferences.dart';
  3. /// App-wide theme mode, persisted across launches. Defaults to
  4. /// [ThemeMode.system] until a user preference is loaded/set.
  5. class ThemeController {
  6. ThemeController._();
  7. static const _prefsKey = 'theme_mode';
  8. static final ValueNotifier<ThemeMode> themeMode = ValueNotifier(ThemeMode.system);
  9. static Future<void> load() async {
  10. final prefs = await SharedPreferences.getInstance();
  11. final stored = prefs.getString(_prefsKey);
  12. themeMode.value = switch (stored) {
  13. 'light' => ThemeMode.light,
  14. 'dark' => ThemeMode.dark,
  15. _ => ThemeMode.system,
  16. };
  17. }
  18. static Future<void> setThemeMode(ThemeMode mode) async {
  19. themeMode.value = mode;
  20. final prefs = await SharedPreferences.getInstance();
  21. await prefs.setString(_prefsKey, mode.name);
  22. }
  23. }