Ключи во Flutter
dart flutterОсновные варианты применения
ValueKey — для элементов списков, чтобы правильно сопоставлять состояние с элементами.
Без ключей, такие списки будут себя неправильно вести при изменяемых списках (вставка, удаление, перемещение).
Используется сравнение через ==.
ListView(
children: items
.map(
(item) => ListTile(
key: ValueKey(item.id),
title: Text(item),
),
)
.toList(),
)
ObjectKey — то же применение, что у ValueKey, только сравнение ключей идёт по типу is и по ссылке identical(),
даже если переопределён метод ==.
UniqueKey — чтобы виджет всегда пересоздавался (именно пересоздание, соответственно и обнуление состояния,
а не просто вызов build повторный).
GlobalKey — для доступа к состоянию из любого места.
Например, для валидации форм:
final _formKey = GlobalKey<FormState>();
_formKey.currentState.validate()
PageStorageKey — используется для сохранения состояния страницы при навигации (например скролл в ListView).