Каков правильный способ использования InheritedWidget? До сих пор я понял, что он дает вам возможность распространять данные по дереву виджета. В крайнем случае, если вы ставите RootWidget, он будет доступен из всех виджетов в дереве на всех Маршрутах, что отлично, потому что мне нужно сделать мою модель ViewModel/Model доступной для моих виджетов без необходимости прибегать к глобальным или синглтонам.
НО InheritedWidget неизменен, так как я могу его обновить? И что еще важнее, как мои устаревшие виджеты вызвали восстановление своих поддеревьев?
К сожалению, документация здесь очень нечеткая, и после обсуждения с большим количеством людей, похоже, действительно не известно, какой правильный способ ее использования.
Я добавляю цитату из Брайана Игана:
Да, я рассматриваю это как способ распространения данных по дереву. То, что я сбиваю с толку, из документов API:
"Унаследованные виджеты при упоминании таким образом приведут к тому, что потребитель перестроит, когда сам наследуемый виджет изменит состояние".
Когда я впервые прочитал это, я подумал:
Я мог бы набить некоторые данные в InheritedWidget и позже мутировать их. Когда эта мутация произойдет, она перестроит все Виджеты, которые ссылаются на мой InheritedWidget. Что я нашел:
Чтобы мутировать состояние InheritedWidget, вам нужно обернуть его в StatefulWidget. Затем вы фактически изменяете состояние StatefulWidget и передаете эти данные на InheritedWidget, который передает данные всем дочерним элементам. Тем не менее, в этом случае, кажется, перестроить все дерево под StatefulWidget, а не только виджеты, ссылающиеся на InheritedWidget. Это верно? Или он каким-то образом знает, как пропустить виджеты, ссылающиеся на InheritedWidget, если updateShouldNotify возвращает false?