博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
16-Flutter移动电商实战-切换后页面状态的保持AutomaticKeepAliveClientMixin
阅读量:6337 次
发布时间:2019-06-22

本文共 2853 字,大约阅读时间需要 9 分钟。

底栏切换每次都重新请求是一件非常恶心的事,flutter 中提供了AutomaticKeepAliveClientMixin 帮我们完成页面状态保存效果。

1、AutomaticKeepAliveClientMixin

AutomaticKeepAliveClientMixin 这个 Mixin 是 Flutter 为了保持页面设置的。哪个页面需要保持页面状态,就在这个页面进行混入。

不过使用使用这个 Mixin 是有几个先决条件的:

  • 使用的页面必须是 StatefulWidget,如果是 StatelessWidget 是没办法办法使用的。
  • 其实只有两个前置组件才能保持页面状态:PageView 和 IndexedStack。
  • 重写 wantKeepAlive 方法,如果不重写也是实现不了的。

2、修改index_page.dart

明白基本知识之后,就可以修改 index_page.dart,思路就是增加一个 IndexedStack 包裹在 tabBodies 外边。

整体代码如下:

import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'home_page.dart'; import 'category_page.dart'; import 'cart_page.dart'; import 'member_page.dart'; class IndexPage extends StatefulWidget {
  _IndexPageState createState() => _IndexPageState(); } class _IndexPageState extends State
{
  PageController _pageController;   final List
 bottomTabs = [     BottomNavigationBarItem(       icon:Icon(CupertinoIcons.home),       title:Text('首页')     ),     BottomNavigationBarItem(       icon:Icon(CupertinoIcons.search),       title:Text('分类')     ),     BottomNavigationBarItem(       icon:Icon(CupertinoIcons.shopping_cart),       title:Text('购物车')     ),      BottomNavigationBarItem(       icon:Icon(CupertinoIcons.profile_circled),       title:Text('会员中心')     ),   ];   final List
 tabBodies = [     HomePage(),     CategoryPage(),     CartPage(),     MemberPage()   ];   int currentIndex= 0;   var currentPage ;   @override   void initState() {
   currentPage=tabBodies[currentIndex];    _pageController=new PageController()       ..addListener(() {
        if (currentPage != _pageController.page.round()) {
          setState(() {
            currentPage = _pageController.page.round();           });         }   });   super.initState();   }   @override   Widget build(BuildContext context) {
    return Scaffold(       backgroundColor: Color.fromRGBO(244, 245, 245, 1.0),       bottomNavigationBar: BottomNavigationBar(         type:BottomNavigationBarType.fixed,         currentIndex: currentIndex,         items:bottomTabs,         onTap: (index){
          setState(() {
           currentIndex=index;             currentPage =tabBodies[currentIndex];            });         },       ),       body: IndexedStack(         index: currentIndex,         children: tabBodies       )     );   } }

3、加入Mixin保持页面状态

在 home_page.dart 里加入 AutomaticKeepAliveClientMixin 混入,加入后需要重写 wantKeepAlive 方法。

主要代码如下:

class _HomePageState extends State
 with AutomaticKeepAliveClientMixin {
  @override   bool get wantKeepAlive =>true; }

为了检验结果,我们在 HomePageState 里增加一个 initState,在里边 print 一些内容,如果内容输出了,证明我们的页面重新加载了,如果没输出,证明我们的页面保持了状态。

@override void initState() {
    super.initState();     print('我打印了哈哈哈哈哈'); }

转载于:https://www.cnblogs.com/niceyoo/p/11055259.html

你可能感兴趣的文章
在Kotlin中使用Gradle构建缓存
查看>>
Scrum 联盟理事辞职
查看>>
2019数据库趋势报告,最受欢迎的是MySQL
查看>>
中台之上(六):如何为一个商业银行设计业务架构?
查看>>
angular2 jsonp跨域请求 express输出jsonp数据
查看>>
环信首席架构师梁宇鹏谈架构、管理及成长
查看>>
专访OneAPM创始人何晓阳:APM将是开发者必备服务
查看>>
又拍云创新CDN服务,同步提供1:1免费云存储
查看>>
C#和F#默认接口方法更新
查看>>
测试人员的GitHub
查看>>
Swift 集合的 reduce 操作
查看>>
无服务平台性能比较
查看>>
Electric Cloud推出用于DevOps的预测分析平台
查看>>
怀疑在软件测试中所起的作用
查看>>
Node.js和io.js将合并到Node基金会下
查看>>
腾讯云工业互联网助力平台发布 推动制造业“数字化”蝶变
查看>>
从Jira到GitHub,详解Spring Framework问题跟踪系统的迁移过程
查看>>
解读 2018之Go语言篇(下):明年有哪些值得期待?
查看>>
Envato不停机迁移边缘网络提供商
查看>>
遗传算法
查看>>