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