Quelle est la bonne façon d'utiliser un InheritedWidget ? Jusqu'à présent, j'ai compris qu'il vous donne la possibilité de propager des données dans l'arbre des widgets. A l'extrême, si vous le placez en tant que RootWidget, il sera accessible à partir de tous les Widgets de l'arbre sur toutes les Routes, ce qui est bien parce que d'une manière ou d'une autre, je dois rendre mon ViewModel/Model accessible à mes Widgets sans avoir à recourir à des globales ou Singletons.
MAIS InheritedWidget est immuable, alors comment puis-je le mettre à jour ? Et, plus important encore, comment mes widgets à états peuvent-ils être déclenchés pour reconstruire leurs sous-arbres ?
Malheureusement, la documentation est ici très peu claire et, après avoir discuté avec beaucoup de personnes, 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 vers le bas de l'arbre. Ce que je trouve confus, dans la documentation de l'API :
"Les widgets hérités, lorsqu'ils sont référencés de cette manière, font en sorte que le consommateur à reconstruire lorsque le widget hérité lui-même change d'état".
Quand j'ai lu ça la première fois, j'ai pensé :
Je pourrais mettre des données dans l'InheritedWidget et les modifier plus tard. Lorsque cette mutation se produira, elle reconstruira tous les Widgets qui font référence à mon InheritedWidget. font référence à mon InheritedWidget Ce que j'ai trouvé :
Afin de modifier l'état d'un InheritedWidget, vous devez l'envelopper dans un StatefulWidget. dans un StatefulWidget. Ensuite, vous modifiez réellement l'état du StatefulWidget et vous transmettez ces données au InheritedWidget, lequel transmet les données à tous ses enfants. Cependant, dans ce cas, il semble reconstruire toute l'arborescence sous le StatefulWidget, et pas seulement les pas seulement les widgets qui font référence au InheritedWidget. Est-ce correct ? Ou est-ce qu'il saura d'une manière ou d'une autre comment ignorer les Widgets qui font référence au InheritedWidget si updateShouldNotify renvoie false ?
2 votes
Excellente question ! Merci de l'avoir posée.