Выбор ответа Junior Виджеты и три дерева обновлено

Flutter: где хранить состояние StatefulWidget

Вопрос

Счётчик хранится в поле int count класса StatefulWidget, а не State. Что будет?

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

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

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

Коротко

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

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

  1. Всё будет работать: Flutter переносит значения полей старого виджета в новый
  2. Не скомпилируется: компилятор требует, чтобы поля StatefulWidget были final
  3. Значение будет теряться: виджет пересоздаётся, а живёт только Stateправильный ответ
  4. Счётчик станет общим для всех экземпляров виджета, как статическое поле класса

Разбор

Виджет это одноразовая конфигурация: родитель перестроился, и создан новый объект виджета с начальными значениями полей. State переживает перестроения, поэтому состояние живёт там. Формально компилятор такое поле пропустит (виджеты @immutable, и линтер предупредит о не-final поле), но поведение будет неверным. Общим для экземпляров было бы только static-поле.

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

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