Flutter实现页面状态缓存的几种方法

本文介绍了在Flutter中使用IndexedStack和PageView组件来保持BottomNavigationBar切换时页面的状态,避免组件销毁并实现缓存。使用IndexedStack可以一次性创建所有页面,通过index切换显示;而PageView配合AutomaticKeepAliveClientMixin可以实现页面缓存,通过PageController控制页面切换。这两种方法能够确保页面在切换后仍然保持之前的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

在使用BottomNavigationBar组件进行页面切换时,页面切走时组件会销毁,再切回来时又会重新创建,如何保持页面切走不销毁组件呢(缓存状态)?

有以下两种方法:

1、使用IndexedStack组件缓存页面
IndexedStack组件会把组件一次性先创建好,堆叠窗口,通过index切换显示对应的窗口

List<Widget> _MainList = [HomePage(), KnowledgePage(), MenstrualCalendarPage(), UserPage()];
int currentIndex = 0;

body: IndexedStack(
  index: currentIndex,
  children: _MainList,
),

在这里插入图片描述
2、使用PageView组件,组件混入AutomaticKeepAliveClientMixin配合使用**(推荐使用)**

List<Widget> _MainList = [HomePage(), KnowledgePage(), MenstrualCalendarPage(), UserPage()];
int currentIndex = 0;
late PageController _pageController;

@override
void initState() {
  super.initState();
  this._pageController = PageController(initialPage: this.currentIndex, keepPage: true);
}
@override
void dispose() {
  _pageController.dispose();
  super.dispose();
}
  
Scaffold(
	body: PageView(
	 physics: NeverScrollableScrollPhysics(), // 禁止左右滑动切换页面
	  controller: _pageController,
	  children: _MainList,
	),
	bottomNavigationBar: BottomNavigationBar(
	   onTap: (int index) {
	     setState(() {
	        this.currentIndex = index;
	        _pageController.jumpToPage(index);
	      });
	    },
	);
);

然后在需要缓存的组件里混入AutomaticKeepAliveClientMixin

class _MenstrualCalendarPageState extends State<MenstrualCalendarPage> with AutomaticKeepAliveClientMixin {

  @override
  void initState() {
    super.initState();
    print('创建分类页面');
  }

  @override
  Widget build(BuildContext context) {
    super.build(context);
    return Container(child: MyText('缓存的组件'),);
  }
  
  @override
  bool get wantKeepAlive => true; // 是否开启缓存
}

如果觉得有用随手点个赞吧,谢谢
关注我,不定时分享技术干货~

扫二维码关注公众号
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

z.week

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值