Ответ
PageStorage — это виджет и сопутствующая система в Flutter для сохранения и восстановления состояния (например, позиции скролла) виджетов, которые временно удаляются из дерева, обычно при навигации между страницами (Route).
Как это работает:
PageStorage(чаще всегоPageStorageBucket) предоставляется выше в дереве виджетов, обычноMaterialAppилиWidgetsAppделают это автоматически.- Виджет, состояние которого нужно сохранить (например,
ListView), получаетPageStorageKey. - При удалении виджета (например, переход на другой экран) его состояние (например,
ScrollPosition) сохраняется вPageStorageBucket, ассоциированном с ключом. - При повторном создании виджета с тем же ключом состояние восстанавливается.
Практический пример — сохранение позиции скролла в 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 или базу данных). Он управляет временным состоянием в рамках сессии работы с приложением.