Flutter 底部 Tab 切换保持页面状态的多种实现方法
需积分: 14 188 浏览量
更新于2024-09-04
收藏 159KB PDF 举报
"Flutter 底部 Tab 切换保持页面状态的几种方法"
Flutter 底部 Tab 切换保持页面状态是 Flutter 开发中的一种常见需求。保持页面状态的方法有多种,本文将介绍两种常见的方法:IndexedStack 和 AutomaticKeepAliveClientMixin。
一、IndexedStack 保持页面状态
IndexedStack 是一种层布局控件,可以在一个控件上面放置另一个控件,只有一个子控件可以被显示,通过 Index 属性来设置显示的控件。IndexedStack 的优点是配置简单,但缺点是不方便单独控制每个页面的状态。
IndexedStack 的使用方法如下:
```dart
Container(
width: double.infinity,
height: double.infinity,
child: new IndexedStack(
index: 0,
alignment: Alignment.center,
children: <Widget>[
Image.network("https://www.itying.com/images/flutter/list1.jpg", fit: BoxFit.cover,),
Image.network("https://www.itying.com/images/flutter/list2.jpg", fit: BoxFit.cover)
],
),
)
```
在结合底部 Tab 切换时,可以使用以下代码:
```dart
body: IndexedStack(
children: this._pageList,
index: _currentIndex,
)
```
二、AutomaticKeepAliveClientMixin 保持页面状态
AutomaticKeepAliveClientMixin 是一种状态保持机制,通过 mixin 的方式来实现页面状态的保持。相比 IndexedStack 而言,AutomaticKeepAliveClientMixin 的配置略微复杂一些。
使用 AutomaticKeepAliveClientMixin 需要继承该类,并在需要保持状态的 Widget 中 override wantKeepAlive 属性,并在 initState 中调用 super.init();。
```dart
import 'package:flutter/material.dart';
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> with AutomaticKeepAliveClientMixin {
@override
bool get wantKeepAlive => true;
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Text('Hello, World!'),
),
);
}
}
```
在结合底部 BottomNavigationBar 时,可以使用以下代码:
```dart
BottomNavigationBar(
currentIndex: _currentIndex,
onTap: (index) {
setState(() {
_currentIndex = index;
});
},
items: [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Home',
),
BottomNavigationBarItem(
icon: Icon(Icons.business),
label: 'Business',
),
],
)
```
IndexedStack 和 AutomaticKeepAliveClientMixin 都可以用来保持页面状态,但它们的使用场景和配置方式不同。IndexedStack 适合简单的页面状态保持,AutomaticKeepAliveClientMixin 适合复杂的页面状态保持。
2021-01-07 上传
2020-08-26 上传
2020-01-17 上传
2022-03-20 上传
2020-04-29 上传
2019-07-22 上传
天丶剑客
- 粉丝: 0
- 资源: 1
最新资源
- Raspberry Pi OpenCL驱动程序安装与QEMU仿真指南
- Apache RocketMQ Go客户端:全面支持与消息处理功能
- WStage平台:无线传感器网络阶段数据交互技术
- 基于Java SpringBoot和微信小程序的ssm智能仓储系统开发
- CorrectMe项目:自动更正与建议API的开发与应用
- IdeaBiz请求处理程序JAVA:自动化API调用与令牌管理
- 墨西哥面包店研讨会:介绍关键业绩指标(KPI)与评估标准
- 2014年Android音乐播放器源码学习分享
- CleverRecyclerView扩展库:滑动效果与特性增强
- 利用Python和SURF特征识别斑点猫图像
- Wurpr开源PHP MySQL包装器:安全易用且高效
- Scratch少儿编程:Kanon妹系闹钟音效素材包
- 食品分享社交应用的开发教程与功能介绍
- Cookies by lfj.io: 浏览数据智能管理与同步工具
- 掌握SSH框架与SpringMVC Hibernate集成教程
- C语言实现FFT算法及互相关性能优化指南