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

本文共 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

你可能感兴趣的文章
PHP实时统计文件下载次数
查看>>
linux eth0 改eth1 在改ip
查看>>
乾颐堂鹏同学通过HCIE送给后来者的话
查看>>
JS中的prototype
查看>>
我的友情链接
查看>>
本体编辑和知识获取软件--protege汉化版
查看>>
23张非常精美的圣诞桌面壁纸分享
查看>>
稀疏矩阵的压缩存储和转置
查看>>
华为S5700交换机开启WEB配置
查看>>
mysql主从同步错误解决和Slave_IO_Running: NO
查看>>
Coding and Paper Letter(十七)
查看>>
性能下降曲线
查看>>
求一个数的二进制中1的个数
查看>>
古代教育观点纵览
查看>>
Linux 下搭建PHP环境(make方法)太麻烦了
查看>>
《三》kubectl命令行管理工具、YAML配置详解
查看>>
iozone测试文件系统性能
查看>>
Hadoop - HDFS的数据流剖析
查看>>
Win7下部署asp.net程序如果有RDLC报表需要以下配置
查看>>
Jhipster_cn中文翻译组
查看>>