Jaki jest prawidłowy sposób korzystania z InheritedWidget? Jak dotąd zrozumiałem, że daje to szansę na propagowanie danych w drzewie widżetów. W skrajnym przypadku, jeśli umieścisz jako RootWidget, będzie on dostępny ze wszystkich widżetów w drzewie na wszystkich trasach, co jest w porządku, ponieważ w jakiś sposób muszę udostępnić mój ViewModel / Model dla moich widżetów bez konieczności uciekania się do globali lub singletonów.
ALE InheritedWidget jest niezmienny, więc jak mogę go zaktualizować? A co ważniejsze, w jaki sposób są uruchamiane moje Stateful Widgets, aby odbudować ich poddrzewa?
Niestety dokumentacja jest tutaj bardzo niejasna i po wielu dyskusjach wydaje się, że nikt tak naprawdę nie wie, jaki jest prawidłowy sposób jej użycia.
Dodaję cytat z Briana Egana:
Tak, uważam to za sposób na propagowanie danych w dół drzewa. To, co uważam za mylące, z dokumentacji API:
„Dziedziczone widżety przywoływane w ten sposób spowodują, że konsument będzie przebudowywał, gdy odziedziczony widżet sam zmieni stan”.
Kiedy po raz pierwszy to przeczytałem, pomyślałem:
Mógłbym umieścić niektóre dane w InheritedWidget i zmodyfikować je później. Kiedy ta mutacja nastąpi, odbuduje wszystkie widżety, które odwołują się do mojego InheritedWidget Co znalazłem:
Aby zmutować stan InheritedWidget, musisz opakować go w StatefulWidget. Następnie faktycznie dokonujesz mutacji stanu StatefulWidget i przekazujesz te dane do InheritedWidget, który przekazuje dane wszystkim swoim elementom podrzędnym. Jednak w tym przypadku wydaje się, że odbudowuje całe drzewo pod StatefulWidget, a nie tylko widżety, które odwołują się do InheritedWidget. Czy to jest poprawne? A może w jakiś sposób będzie wiedziało, jak pominąć widżety, które odwołują się do InheritedWidget, jeśli updateShouldNotify zwróci false?