一、IndexedStack 保持页面状态

IndexedStack 和 Stack 一样,都是层布局控件, 可以在一个控件上面放置另一
个控件,但唯一不同的是 IndexedStack 在同一时刻只能显示子控件中的一个控
件,通过 Index 属性来设置显示的控件。
IndexedStack 来保持页面状态的优点就是配置简单。IndexedStack 保持页面状
态的缺点就是不方便单独控制每个页面的状态。
k IndexedStack 用法:

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 切换

body:IndexedStack(
children: this._pageList,
index: _currentIndex,
),

二丶 AutomaticKeepAliveClientMixin 保持页面状态

AutomaticKeepAliveClientMixin 结合 tab 切换保持页面状态相比 IndexedStack 而言配置起来稍
微有些复杂。它结合底部 BottomNavigationBar 保持页面状态的时候需要进行如下配置。

import 'package:flutter/material.dart';
import 'Home.dart';
import 'Category.dart';
import 'Cart.dart';
import 'User.dart';
class Tabs extends StatefulWidget {Tabs({Key key}) : super(key: key);_TabsState createState() => _TabsState();
}
class _TabsState extends State<Tabs> {int _currentIndex=1;
//创建页面控制器var _pageController;@overridevoid initState(){//页面控制器初始化_pageController = new PageController(initialPage : _currentIndex);super.initState();}List<Widget> _pageList=[HomePage(),CategoryPage(),CartPage(),UserPage()];@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("jdshop"),),
//必须用 PageView 加载不同的页面body: PageView(controller: _pageController,children: this._pageList,onPageChanged: (index){_currentIndex = index;},),bottomNavigationBar: BottomNavigationBar(currentIndex:this._currentIndex ,onTap: (index){setState(() {//this._currentIndex=index;
//页面控制器进行跳转_pageController.jumpToPage(this._currentIndex);});},type:BottomNavigationBarType.fixed ,fixedColor:Colors.red,items: [BottomNavigationBarItem(icon: Icon(Icons.home),title: Text("首页")),BottomNavigationBarItem(icon: Icon(Icons.category),title: Text("分类")),BottomNavigationBarItem(icon: Icon(Icons.shopping_cart),title: Text("购物车")),BottomNavigationBarItem(icon: Icon(Icons.people),title: Text("我的"))],),);}
}

需要持久化的页面加入如下代码:

class HomePage extends StatefulWidget {HomePage({Key key}) : super(key: key);_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> with AutomaticKeepAliveClientMixin{@overridebool get wantKeepAlive => true;
}

Flutter高级第3篇:底部 Tab 切换保持页面状态的几种方法相关推荐

  1. tab vue 竖排_vue 实现tab切换保持数据状态

    页面做tab切换,由于组件每一次切换都会重新实例化组件,我们想要页面不论怎么切换都仍然保持tab里面的内容不会刷新,减少页面重新渲染以及减少请求 实现方法:使用包裹组件 列表页面跳转详情 ,列表页面保 ...

  2. 不刷新页面的tab_SwiftUI小技巧之如何解决Tab切换后页面重置和List刷新bug

    SwiftUI的tabview非常好用,简单几行就能构建一套基于Tab的App.但是SwiftUI目前tabview存在一个小bug,当tab切换时内部中的list或NavigationLink将会重 ...

  3. 16-Flutter移动电商实战-切换后页面状态的保持AutomaticKeepAliveClientMixin

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

  4. Flutter底部导航栏BottomNavigationBar页面状态保持解决方案

    网易云[玩转大前端]配套课程 EDU配套 教程 Flutter开发的点滴积累系列文章 一行代代码置灰应用?对就是这么干 在实际应用开发中,一般应用的首页面会有这种结构,在Flutter应用开发中,有多 ...

  5. 高级之路篇十二:全面解析web安全及防御方法

    web安全常见的8大板块: 老生常谈的XSS跨站脚本攻击 警惕iframe带来的风险 别被点击劫持了 错误的内容推断 防火防盗防猪队友:不安全的第三方依赖包 用了HTTPS也可能掉坑里 本地存储数据泄 ...

  6. 使用angularJs实现tab切换

    最近的项目客户要求使用angularJs,不得不说angularJs用起来确实方便.但是有些功能事件不会的话还是会用jq.其实在使用angularJs的时候,能不用jq最后还是不用jq,以免混乱.冲突 ...

  7. Android典型界面设计(3)——访网易新闻实现双导航tab切换

    一.问题描述 双导航tab切换(底部区块+区域内头部导航),实现方案底部区域使用FragmentTabHost+Fragment, 区域内头部导航使用ViewPager+Fragment,可在之前博客 ...

  8. 仿qq底部Tab导航

    本篇博客主要实现以下效果: 使用FragmentTabHost实现qq底部Tab切换 使用RadioGroup和RadioButton实现仿qq底部切换 使用RadioGroup和ViewPager ...

  9. 高仿 自如APP 底部导航切换动画效果

    code小生 一个专注大前端领域的技术平台公众号回复Android加入安卓技术群 作者:孔鹏飞 链接:https://www.jianshu.com/p/7a544cf34bcf 声明:本文已获孔鹏飞 ...

  10. 巧妙的有css合并图片解决tab切换的背景图片

    巧妙的有css合并图片解决tab切换的背景图片 有时候做tab切换的时候 会碰到下面的这种情况 我截个图过来看看 tab切换 打开页面时候 茶庄介绍  及鼠标移上去时候 是上面这样的效果  当鼠标移下 ...

最新文章

  1. linux修改定时后如何保存文件夹,linux定时任务的一些相关操作汇总
  2. Python+opencv 机器视觉 - 基于霍夫圈变换算法检测图像中的圆形实例演示
  3. We will be discontinuing the Nitrous Development Platform and Cloud IDE on November 14th, 2016.
  4. 大数据技术 学习之旅_为什么聚焦是您数据科学之旅的关键
  5. unoconv 在线预览 doc,doxc,xls,xlsx,ppt,pptx 文件功能环境搭建
  6. CentOS7 下安装 Redis
  7. AttributeError : module ‘enum‘ has no attribute ‘IntFlag‘
  8. wordpress mysql缓存_WordPress 对象缓存与数据库缓存
  9. [Ext JS 4] Grid 组件
  10. shell 脚本初习
  11. python从入门到放弃表情图-[python从入门到放弃]基于百度OCR的文字识别
  12. 使用mysql事务管理_MySQL事务管理的介绍(附示例)
  13. 日志分析(shell脚本)
  14. 【十次方】十次方项目介绍
  15. MOSSE 相关滤波器详解
  16. 转载-史密斯(smith)圆图讲解-基础内容
  17. C#实现百度AI-实时语音识别转写-附源码
  18. shell美元符_Linux Shell中的美元符号$ | 学步园
  19. hdu 5956 The Elder
  20. 小米商城网页制作大全-完结篇

热门文章

  1. AMD、CMD和Common规范
  2. CH24C 逃不掉的路
  3. ES6 class继承
  4. cogs 1811. [NOIP2014]螺旋矩阵
  5. js二(多)叉树算法
  6. 无限级下拉菜单(树形菜单,二级菜单)
  7. SVN missing 解决
  8. Yii框架怎么寻找对应视图
  9. Win7下Tomcat7和Apache2.2集成
  10. Communix操作系统的前生今世