import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:shared_preferences/shared_preferences.dart'; enum AppThemeVariant { redDark, redLight, greenDark, greenLight } const _themeKey = 'themeVariant'; /// Colour scheme (red/green) × brightness (dark/light), persisted. class ThemeNotifier extends StateNotifier { ThemeNotifier() : super(AppThemeVariant.redDark) { _load(); } Future _load() async { try { final prefs = await SharedPreferences.getInstance(); final saved = prefs.getString(_themeKey); for (final v in AppThemeVariant.values) { if (v.name == saved && mounted) state = v; } } catch (_) { // Keep the default if preferences can't be read. } } void set(AppThemeVariant v) { state = v; SharedPreferences.getInstance() .then((prefs) => prefs.setString(_themeKey, v.name)) .catchError((Object _) => false); } } final themeProvider = StateNotifierProvider( (ref) => ThemeNotifier(), ); /// Returns the accent color for the current theme variant. extension AppThemeVariantX on AppThemeVariant { Color get accentColor { switch (this) { case AppThemeVariant.redDark: case AppThemeVariant.redLight: return const Color(0xFFFF4444); case AppThemeVariant.greenDark: case AppThemeVariant.greenLight: return const Color(0xFF00E676); } } bool get isDark => this == AppThemeVariant.redDark || this == AppThemeVariant.greenDark; }