Ключи во 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).