Можете объяснить концепцию PageStorage и для чего она используется в системе?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
PageStorage в Flutter нужен для сохранения небольшого состояния страницы между переключениями внутри дерева виджетов. Обычно он помогает запоминать позицию скролла или другой локальный UI-state, когда виджет временно убирается из дерева и потом создаётся снова. Это не полноценное хранилище данных, а механизм для восстановления состояния интерфейса.
Определение:
PageStorage — это специальное хранилище в Flutter, привязанное к дереву виджетов, которое позволяет сохранять и восстанавливать небольшие значения для отдельных страниц или вложенных виджетов. Чаще всего оно используется вместе с PageStorageKey, чтобы Flutter мог отличать одну страницу от другой и возвращать ранее сохранённое состояние, например положение списка.
Пример использования:
Типичный случай — вкладки с ListView: пользователь прокручивает список на одной вкладке, переключается на другую, затем возвращается обратно, и список остаётся на прежнем месте.
class MyTabs extends StatelessWidget {
const MyTabs({super.key});
@override
Widget build(BuildContext context) {
return DefaultTabController(
length: 2,
child: Scaffold(
appBar: AppBar(
bottom: const TabBar(
tabs: [
Tab(text: 'Новости'),
Tab(text: 'Чаты'),
],
),
),
body: const TabBarView(
children: [
ListView(
key: PageStorageKey<String>('news-list'),
children: [
ListTile(title: Text('Новость 1')),
ListTile(title: Text('Новость 2')),
],
),
ListView(
key: PageStorageKey<String>('chats-list'),
children: [
ListTile(title: Text('Чат 1')),
ListTile(title: Text('Чат 2')),
],
),
],
),
),
);
}
}
Пояснение кода:
В этом примере у каждого ListView есть свой PageStorageKey.
Когда пользователь переключается между вкладками, TabBarView может пересоздавать содержимое, но PageStorage сохраняет состояние каждого списка отдельно.
За счёт ключа Flutter понимает, что news-list и chats-list — это разные сущности, и восстанавливает для каждой её сохранённые данные, например scroll offset.
Ключевые моменты:
PageStorageхранит только небольшое UI-состояние, а не бизнес-данные.- Основной практический кейс — сохранение позиции скролла при навигации или переключении вкладок.
- Для работы обычно нужен
PageStorageKey, чтобы состояние было привязано к конкретному виджету. - Это полезно, когда виджет удаляется из дерева и потом создаётся заново.
- Не стоит использовать
PageStorageкак заменуState,Provider,Blocили другой архитектуре хранения данных.