我们在使用TabBar或者BottomNavigationBar的时候,都会配合使用 TabBarView和PageView 进行页面展示,但如果不做特别处理的话,我们会发现在每次切换页面之后,页面都会重新刷新(比如一个列表页面,拉到最后一条数据,然后跳转到其它Tab再跳转回来,列表又变成从第一条数据开始展示),实在是很不友好。这里有两种办法解决:
- PageStorageKey
- AutomaticKeepAliveClientMixin
两种方法都能记录页面状态,两者又有些异同:
- 两者都是在 TabBarView 和 PageView 的子页面进行设置
- 设置 PageStorageKey 的页面每次都是会重新走生命周期,也就是每次进入页面都会重新调用 initState() 和 build 等一系列方法;而设置 AutomaticKeepAliveClientMixin 的页面只在第一次进入的时候会走页面的生命周期,后面不会重新调用。
1、PageStorageKey
class TabPageTestController extends StatefulWidget {
final String title;
TabPageTestController({Key key, this.title}): super(key: key);
@override
_TabPageTestControllerState createState() => _TabPageTestControllerState();
}
class _TabPageTestControllerState extends State<TabPageTestController>{
List<String> dates =