Что такое PageStorage в Flutter?

«Что такое PageStorage в Flutter?» — вопрос из категории Хранение данных, который задают на 29% собеседований Flutter Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

PageStorage — это виджет и сопутствующая система в Flutter для сохранения и восстановления состояния (например, позиции скролла) виджетов, которые временно удаляются из дерева, обычно при навигации между страницами (Route).

Как это работает:

  1. PageStorage (чаще всего PageStorageBucket) предоставляется выше в дереве виджетов, обычно MaterialApp или WidgetsApp делают это автоматически.
  2. Виджет, состояние которого нужно сохранить (например, ListView), получает PageStorageKey.
  3. При удалении виджета (например, переход на другой экран) его состояние (например, ScrollPosition) сохраняется в PageStorageBucket, ассоциированном с ключом.
  4. При повторном создании виджета с тем же ключом состояние восстанавливается.

Практический пример — сохранение позиции скролла в ListView:

ListView.builder(
  key: const PageStorageKey<String>('products_list'), // Уникальный ключ для этого списка
  itemCount: 100,
  itemBuilder: (context, index) => ListTile(title: Text('Item $index')),
)

Где это полезно:

  • В TabBarView, где каждая вкладка — отдельный скроллящийся список.
  • При навигации Navigator.push и возврате Navigator.pop.
  • В сложных виджетах с внутренним состоянием, которое дорого пересчитывать.

Важно: PageStorage не предназначен для постоянного хранения данных (для этого используйте shared_preferences или базу данных). Он управляет временным состоянием в рамках сессии работы с приложением.