Pourquoi une gestion d'état ?
setState ne partage l'état que dans un widget. Dès que plusieurs écrans doivent voir la même donnée (les campagnes, l'utilisateur connecté), on a besoin d'un état partagé. Provider est la solution recommandée pour débuter.
Un ChangeNotifier
Une classe qui étend ChangeNotifier détient l'état et prévient l'UI via notifyListeners().
class CampagneProvider extends ChangeNotifier { List<Campagne> _liste = []; List<Campagne> get liste => _liste; Future<void> charger(String? zone) async { _liste = await CampagneService().getOuvertes(zone: zone); notifyListeners(); } }
Fournir le provider
On place le provider au-dessus des écrans concernés (souvent à la racine).
ChangeNotifierProvider( create: (_) => CampagneProvider()..charger(null), child: const MonAppli(), )
Consommer l'état
Dans un écran : context.watch() pour lire et se reconstruire aux changements, context.read() pour appeler une méthode sans écouter.
final campagnes = context.watch<CampagneProvider>().liste; // action : context.read<CampagneProvider>().charger('Ladignac');
Crée CampagneProvider (liste + charger + rejoindre) et un AuthProvider (utilisateur/JWT). Après une inscription, notifyListeners() met à jour la jauge partout — sans recharger tout l'écran.
- Provider partage l'état entre écrans.
ChangeNotifier+notifyListeners()pour publier les changements.context.watch(lire+écouter) /context.read(agir).