Как сохранить состояние страницы при переключении между TabView?

Для сохранения состояния страницы при переключении между вкладками (TabView
) с использованием библиотеки auto_router
,
можно воспользоваться несколькими подходами.
-
Использование
AutoTabsRouter
: Библиотекаauto_router
предоставляет виджетAutoTabsRouter
, который автоматически управляет состоянием дочерних маршрутов. Чтобы сохранять состояние страниц при переключении вкладок, используйте этот виджет для управления вкладками.
Пример:class MyHomePage extends StatelessWidget { @override Widget build(BuildContext context) { return AutoTabsRouter( routes: [ Tab1Route(), Tab2Route(), Tab3Route(), ], builder: (context, child, animation) { final tabsRouter = AutoTabsRouter.of(context); return Scaffold( body: FadeTransition( opacity: animation, child: child, ), bottomNavigationBar: BottomNavigationBar( currentIndex: tabsRouter.activeIndex, onTap: tabsRouter.setActiveIndex, items: [ BottomNavigationBarItem(icon: Icon(Icons.home), label: 'Tab1'), BottomNavigationBarItem(icon: Icon(Icons.settings), label: 'Tab2'), BottomNavigationBarItem(icon: Icon(Icons.person), label: 'Tab3'), ], ), ); }, ); } }
-
Использование
KeepAlive
: Если вам нужно сохранять состояние конкретного виджета (например, при использованииListView
илиPageView
), вы можете применитьAutomaticKeepAliveClientMixin
. Это полезно, если нужно сохранять скролл-позицию и другие состояния виджета.
Пример:class Tab1Page extends StatefulWidget { @override _Tab1PageState createState() => _Tab1PageState(); } class _Tab1PageState extends State<Tab1Page> with AutomaticKeepAliveClientMixin { @override Widget build(BuildContext context) { super.build(context); // Не забудьте вызвать super.build для корректной работы KeepAlive return ListView( children: [ // Ваши элементы ], ); } @override bool get wantKeepAlive => true; // Включаем сохранение состояния }
-
Использование состояния внутри ViewModel: Если вы используете подход с get_it или другими библиотеками управления состоянием, можно сохранять состояние в ViewModel или сервисе, который инжектируется через DI. Например, можно сохранить индекс активной вкладки и восстанавливать его при возвращении на страницу.
Каждый из этих подходов можно комбинировать, в зависимости от того, что именно вы хотите сохранять: состояние данных, интерфейса или конкретных виджетов.