🛢️Parcours Fioul GroupéFlutter · Chapitre 12
Accueil › Flutter › Chapitre 12
Chapitre 12 / 19

Provider & gestion d'état

Au-delà de setState, comment partager un état entre plusieurs écrans et rafraîchir automatiquement l'UI, avec le paquet Provider.

1 Notion

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.

2 Étape

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();
  }
}
3 Étape

Fournir le provider

On place le provider au-dessus des écrans concernés (souvent à la racine).

ChangeNotifierProvider(
  create: (_) => CampagneProvider()..charger(null),
  child: const MonAppli(),
)
4 Étape

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');
🛢️ Sur le projet Fioul Groupé

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.

À retenir
  • Provider partage l'état entre écrans.
  • ChangeNotifier + notifyListeners() pour publier les changements.
  • context.watch (lire+écouter) / context.read (agir).
← Chapitre 11