Выбор ответа Senior Виджеты и три дерева обновлено
Flutter: когда нужен GlobalKey
Вопрос
В каком случае оправдан GlobalKey?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Перенос поддерева с сохранением State или доступ к currentState формы. GlobalKey уникален на всё приложение: через него можно получить State (formKey.currentState!.validate()) и context, и он позволяет элементу «переехать» в другое место дерева с сохранением состояния.
Варианты ответа
- Для каждого элемента длинного списка, чтобы ускорить прокрутку и переиспользование
- Чтобы избежать перестроения виджета при
setStateродителя: ключ замораживает поддерево - Для любого
StatefulWidget, иначе его состояние потеряется при первом же перестроении - Перенос поддерева с сохранением
Stateили доступ кcurrentStateформыправильный ответ
Разбор
GlobalKey уникален на всё приложение: через него можно получить State (formKey.currentState!.validate()) и context, и он позволяет элементу «переехать» в другое место дерева с сохранением состояния. Он дорогой: фреймворк ведёт глобальный реестр. Для списков достаточно локальных ValueKey. От перестроений ключ не защищает, а StatefulWidget без ключа состояние не теряет, пока остаётся на своём месте.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.