Ответ вслух Middle Виджеты и три дерева спрашивают часто обновлено

Объясните три дерева Flutter

Вопрос

Расскажите, как Flutter превращает виджеты в пиксели: какие деревья есть и зачем их три.

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

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

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

Коротко

Образцовый ответ: «Виджет это описание интерфейса, лёгкий неизменяемый объект. При каждом build создаются новые виджеты, и это нормально.

Что должно прозвучать в ответе

  • Widget: неизменяемая конфигурация, создаётся на каждом `build`

  • Element: место в дереве, долгоживущий, держит `State`, это и есть `BuildContext`

  • RenderObject: раскладка, отрисовка, hit test, дорогой

  • При перестроении элемент сравнивает `runtimeType` и `key` и переиспользует себя и рендер-объект

  • Поэтому пересоздавать виджеты дёшево, а `const` позволяет вообще пропустить поддерево

Что могут спросить следом

  • Что будет, если поменять тип виджета на том же месте?
  • Где живёт State и почему?
  • Как ключи влияют на сопоставление?

Разбор

Образцовый ответ: «Виджет это описание интерфейса, лёгкий неизменяемый объект. При каждом build создаются новые виджеты, и это нормально. Элемент это экземпляр виджета в конкретной позиции дерева: он долгоживущий, хранит State у Stateful-виджетов и реализует BuildContext. Рендер-объект отвечает за размер, позицию и отрисовку, он дорогой. Когда приходит новый виджет, элемент проверяет canUpdate: тот же runtimeType и тот же ключ. Если да, элемент остаётся, State сохраняется, рендер-объект просто получает новые свойства. Если нет, поддерево пересоздаётся. Три дерева нужны, чтобы декларативный подход «опиши весь UI заново» не стоил пересоздания дорогих объектов. const-виджеты дают ещё одну оптимизацию: тот же экземпляр, и Flutter не заходит в его поддерево»

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

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