Applez Nous: +41 22 518 70 00
Pour rendre notre modèle d’état accessible à l’ensemble des écrans, nous le positionnons tout en haut de l’arbre de widgets, généralement au niveau de la racine runApp() :
void main() {
runApp(
ChangeNotifierProvider(
create: (context) => SessionUtilisateurModel(),
child: const MonApplicationEcole(),
),
);
}
Le widget Consumer<T> écoute les modifications du modèle et reconstruit uniquement la portion de widgets qui dépend des données modifiées, sans reconstruire tout l’écran :
Consumer<SessionUtilisateurModel>(
builder: (context, session, child) {
if (!session.estConnecte) {
return const Text('Session non active : Veuillez vous connecter.');
}
return Text(
'Bienvenue, ${session.nomUtilisateur} !',
style: const TextStyle(fontWeight: FontWeight.bold),
);
},
);
Lors du clic sur un bouton d’action, nous souhaitons invoquer une méthode du modèle sans nous abonner à ses futures modifications. On utilise alors context.read<MonModele>().maMethode(), évitant ainsi toute reconstruction graphique inutile.
Synthèse pédagogique : Utilisez
context.watchouConsumerpour afficher des données réactives, etcontext.readà l’intérieur des callbacks d’actions pour préserver l’efficacité du moteur.