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

Flutter: когда нужен GlobalKey

Вопрос

В каком случае оправдан GlobalKey?

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

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

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

Коротко

Правильный ответ: Перенос поддерева с сохранением State или доступ к currentState формы. GlobalKey уникален на всё приложение: через него можно получить State (formKey.currentState!.validate()) и context, и он позволяет элементу «переехать» в другое место дерева с сохранением состояния.

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

  1. Для каждого элемента длинного списка, чтобы ускорить прокрутку и переиспользование
  2. Чтобы избежать перестроения виджета при setState родителя: ключ замораживает поддерево
  3. Для любого StatefulWidget, иначе его состояние потеряется при первом же перестроении
  4. Перенос поддерева с сохранением State или доступ к currentState формыправильный ответ

Разбор

GlobalKey уникален на всё приложение: через него можно получить State (formKey.currentState!.validate()) и context, и он позволяет элементу «переехать» в другое место дерева с сохранением состояния. Он дорогой: фреймворк ведёт глобальный реестр. Для списков достаточно локальных ValueKey. От перестроений ключ не защищает, а StatefulWidget без ключа состояние не теряет, пока остаётся на своём месте.

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

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