Выбор ответа Junior Жизненный цикл обновлено
Flutter: Theme.of в initState
Вопрос
Почему Theme.of(context) в initState приводит к ошибке, а в didChangeDependencies нет?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Зависеть от InheritedWidget разрешено только начиная с didChangeDependencies. context доступен уже в initState (элемент существует), но dependOnInheritedWidgetOfExactType там запрещён: фреймворк ещё не готов регистрировать зависимость.
Варианты ответа
- В
initStateещё нетcontext: он появляется только при первом вызовеbuild - Зависеть от
InheritedWidgetразрешено только начиная сdidChangeDependenciesправильный ответ - Тема загружается асинхронно и в момент
initStateещё не готова, её надо дождаться - Ошибки нет: в
initStateможно вызывать любыеof(context), еслиStateсмонтирован
Разбор
context доступен уже в initState (элемент существует), но dependOnInheritedWidgetOfExactType там запрещён: фреймворк ещё не готов регистрировать зависимость. Сразу после initState вызывается didChangeDependencies, где это безопасно, и он же вызовется снова, когда тема поменяется. Тема ничего не грузит асинхронно.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.