Ответ
PageStorageKey — это специальный тип ValueKey, который используется в паре с виджетом PageStorage для идентификации и сохранения состояния конкретного виджета (чаще всего позиции скролла).
Назначение: Связывает состояние виджета (данные) с уникальным идентификатором в PageStorageBucket. Это позволяет Flutter понять, какое состояние принадлежит какому виджету, особенно когда виджет уничтожается и создается заново.
Синтаксис и использование:
// Для простых случаев можно использовать строку
const PageStorageKey<String>('my_unique_list_key')
// Или любой другой comparable-объект в качестве значения
PageStorageKey<int>(42)
PageStorageKey<MyClass>(myInstance) // где MyClass реализует == и hashCode
Типичный сценарий применения со Scrollable виджетами:
CustomScrollView(
key: const PageStorageKey('home_feed_scroll'),
slivers: [
SliverList(...),
],
)
// При возврате на этот экран позиция скролла восстановится автоматически.
Ключевые моменты:
- Уникальность: Ключ должен быть уникальным в рамках одного
PageStorageBucket(обычно в рамках одного маршрута/Route) для разных сохраняемых виджетов. Иначе состояния могут перепутаться. - Типизация: Использование дженерика (
PageStorageKey<T>) помогает избежать случайных коллизий ключей разных типов. - Не для всех виджетов: В основном используется со
ListView,GridView,CustomScrollViewи другими прокручиваемыми виджетами, но может применяться и для сохранения другого простого состояния.
Без PageStorageKey скроллящиеся виджеты при повторной инициализации начинали бы с позиции 0.0.