Выбор ответа Junior Виджеты и три дерева обновлено
Flutter: где хранить состояние StatefulWidget
Вопрос
Счётчик хранится в поле int count класса StatefulWidget, а не State. Что будет?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Значение будет теряться: виджет пересоздаётся, а живёт только State. Виджет это одноразовая конфигурация: родитель перестроился, и создан новый объект виджета с начальными значениями полей.
Варианты ответа
- Всё будет работать: Flutter переносит значения полей старого виджета в новый
- Не скомпилируется: компилятор требует, чтобы поля
StatefulWidgetбылиfinal - Значение будет теряться: виджет пересоздаётся, а живёт только
Stateправильный ответ - Счётчик станет общим для всех экземпляров виджета, как статическое поле класса
Разбор
Виджет это одноразовая конфигурация: родитель перестроился, и создан новый объект виджета с начальными значениями полей. State переживает перестроения, поэтому состояние живёт там. Формально компилятор такое поле пропустит (виджеты @immutable, и линтер предупредит о не-final поле), но поведение будет неверным. Общим для экземпляров было бы только static-поле.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Виджеты и три дерева»
- Flutter: когда элемент переиспользуется
- Flutter: что такое BuildContext
- Виды ключей во Flutter
- StatelessWidget и StatefulWidget
- Widget, Element, RenderObject
- Flutter: когда нужен GlobalKey
- Flutter: удаление элемента списка без ключей
- Ключи и их назначение