Выбор ответа Senior Управление состоянием спрашивают часто обновлено

Flutter: как работает InheritedWidget

Вопрос

Что происходит с потомками, которые вызвали dependOnInheritedWidgetOfExactType<T>(), когда InheritedWidget заменили новым?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Если updateShouldNotify вернул true, у зависимых вызываются didChangeDependencies и build. dependOn... регистрирует зависимость элемента.

Варианты ответа

  1. Перестраивается всё поддерево под InheritedWidget, независимо от того, кто на него подписан
  2. Ничего: потомки должны сами периодически опрашивать данные, например таймером
  3. Если updateShouldNotify вернул true, у зависимых вызываются didChangeDependencies и buildправильный ответ
  4. Зависимые потомки пересоздаются вместе со своим State, чтобы получить новые данные

Разбор

dependOn... регистрирует зависимость элемента. При замене InheritedWidget фреймворк спрашивает updateShouldNotify и, если нужно, помечает грязными только зависимые элементы. Остальные потомки не трогаются (если их не перестраивает родитель). State сохраняется. На этом механизме построены Theme.of, Provider и Riverpod.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме