Выбор ответа Middle Производительность обновлено

Flutter: метод _buildX или отдельный виджет

Вопрос

Почему часть UI лучше вынести в отдельный класс-виджет, а не в метод _buildHeader()?

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

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

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

Коротко

Правильный ответ: Отдельный const-виджет не перестраивается с родителем и имеет свой контекст. Метод выполняется при каждом build родителя, и его результат всегда строится заново.

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

  1. Методы в Dart вызываются медленнее конструкторов, и на больших экранах это заметно
  2. Методы, возвращающие виджеты, запрещены линтером Flutter и не пройдут анализ
  3. Отдельный const-виджет не перестраивается с родителем и имеет свой контекстправильный ответ
  4. Разницы нет: это вопрос стиля, Flutter обрабатывает оба варианта одинаково

Разбор

Метод выполняется при каждом build родителя, и его результат всегда строится заново. Отдельный виджет с const-конструктором Flutter пропустит, если параметры не менялись, а setState внутри него перестроит только его. Плюс свой контекст (полезно для Theme.of, Scaffold.of). Скорость вызова не отличается, и методы не запрещены, но на собесе ожидают именно этот аргумент.

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

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