Flutter: Comment utiliser correctement les Hérité d'un Widget?

Quelle est la bonne façon d'utiliser un InheritedWidget? Jusqu'à présent j'ai compris qu'il vous donne la chance de propager les données vers le bas le Widget de l'arbre. Dans l'extrême si vous la mettre en RootWidget il sera accessible à partir de tous les Widgets dans l'arbre sur toutes les Routes, ce qui est bien parce que de toute façon je dois faire mon ViewModel/Modèle accessible pour mes trucs sans avoir à recourir à des variables globales ou des Singletons.

MAIS InheritedWidget est immuable, alors comment puis-je mettre à jour? Et plus important, comment sont mes Stateful Widgets déclenchée à reconstruire leurs sous-arbres?

Malheureusement, la documentation est ici très floue et après en avoir discuté avec beaucoup de personne ne semble vraiment savoir quelle est la bonne façon de l'utiliser.

J'ajoute une citation de Brian Egan:

Oui, je le vois comme un moyen de propager les données en bas de l'arbre. Ce que je trouve
déroutant, à partir de l'API docs:

"Hérité des widgets référencées dans cette voie, sera la cause de la
la consommation de reconstruire lorsque les hérité widget lui-même change d'état."

Quand j'ai lu cela, j'ai pensé:

Je pourrais trucs certaines données dans le InheritedWidget et de les transformer plus tard.
Lorsque que la mutation se produit, il faudra recompiler tous les Widgets
référence de mon InheritedWidget Ce que j'ai trouvé:

Pour la mutation de l'État d'un InheritedWidget, vous avez besoin d'envelopper
dans un StatefulWidget Vous alors effectivement la mutation de l'état de l'
StatefulWidget et de transmettre ces données vers le InheritedWidget, qui
les mains des données à tous ses enfants. Toutefois, dans ce cas, il
semble de reconstruire l'ensemble de l'arborescence en dessous de la StatefulWidget, pas
juste les Widgets qui font référence à la InheritedWidget. Est-ce exact?
Ou cela est-il en quelque sorte de savoir comment faire pour ignorer les Widgets qui font référence à la
InheritedWidget si updateShouldNotify renvoie false?

OriginalL'auteur Thomas | 2018-03-26