import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:shared_preferences/shared_preferences.dart'; /// Palette de couleurs de l'application (couleur primaire + surface de fond). /// Le nom affiché est géré via AppLocalizations (palette0…palette4). class AppPalette { final Color primary; final Color surface; const AppPalette({required this.primary, required this.surface}); } const List appPalettes = [ AppPalette(primary: Color(0xFFD32F2F), surface: Color(0xFF1B2333)), AppPalette(primary: Color(0xFF1565C0), surface: Color(0xFF0D1B2A)), AppPalette(primary: Color(0xFF2E7D32), surface: Color(0xFF1A2B1A)), AppPalette(primary: Color(0xFFF9A825), surface: Color(0xFF1C1A00)), AppPalette(primary: Color(0xFF6A1B9A), surface: Color(0xFF1A0A2B)), ]; const String _prefsPaletteIndex = 'palette_index'; /// Gère l'index de la palette sélectionnée, persistée dans les préférences. class ThemeNotifier extends Notifier { @override int build() { _loadSaved(); return 0; } Future _loadSaved() async { final prefs = await SharedPreferences.getInstance(); final idx = prefs.getInt(_prefsPaletteIndex) ?? 0; state = idx.clamp(0, appPalettes.length - 1); } Future setPalette(int index) async { state = index.clamp(0, appPalettes.length - 1); final prefs = await SharedPreferences.getInstance(); await prefs.setInt(_prefsPaletteIndex, state); } AppPalette get current => appPalettes[state]; } /// Index de la palette de couleurs active. final themeProvider = NotifierProvider(ThemeNotifier.new);