Выбор ответа Senior Управление состоянием спрашивают часто обновлено
Flutter: как работает InheritedWidget
Вопрос
Что происходит с потомками, которые вызвали dependOnInheritedWidgetOfExactType<T>(), когда InheritedWidget заменили новым?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Если updateShouldNotify вернул true, у зависимых вызываются didChangeDependencies и build. dependOn... регистрирует зависимость элемента.
Варианты ответа
- Перестраивается всё поддерево под
InheritedWidget, независимо от того, кто на него подписан - Ничего: потомки должны сами периодически опрашивать данные, например таймером
- Если
updateShouldNotifyвернулtrue, у зависимых вызываютсяdidChangeDependenciesиbuildправильный ответ - Зависимые потомки пересоздаются вместе со своим
State, чтобы получить новые данные
Разбор
dependOn... регистрирует зависимость элемента. При замене InheritedWidget фреймворк спрашивает updateShouldNotify и, если нужно, помечает грязными только зависимые элементы. Остальные потомки не трогаются (если их не перестраивает родитель). State сохраняется. На этом механизме построены Theme.of, Provider и Riverpod.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.