Flutter高级第3篇:底部 Tab 切换保持页面状态的几种方法
一、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 切换保持页面状态的几种方法相关推荐
- tab vue 竖排_vue 实现tab切换保持数据状态
页面做tab切换,由于组件每一次切换都会重新实例化组件,我们想要页面不论怎么切换都仍然保持tab里面的内容不会刷新,减少页面重新渲染以及减少请求 实现方法:使用包裹组件 列表页面跳转详情 ,列表页面保 ...
- 不刷新页面的tab_SwiftUI小技巧之如何解决Tab切换后页面重置和List刷新bug
SwiftUI的tabview非常好用,简单几行就能构建一套基于Tab的App.但是SwiftUI目前tabview存在一个小bug,当tab切换时内部中的list或NavigationLink将会重 ...
- 16-Flutter移动电商实战-切换后页面状态的保持AutomaticKeepAliveClientMixin
底栏切换每次都重新请求是一件非常恶心的事,flutter 中提供了AutomaticKeepAliveClientMixin 帮我们完成页面状态保存效果. 1.AutomaticKeepAliveCl ...
- Flutter底部导航栏BottomNavigationBar页面状态保持解决方案
网易云[玩转大前端]配套课程 EDU配套 教程 Flutter开发的点滴积累系列文章 一行代代码置灰应用?对就是这么干 在实际应用开发中,一般应用的首页面会有这种结构,在Flutter应用开发中,有多 ...
- 高级之路篇十二:全面解析web安全及防御方法
web安全常见的8大板块: 老生常谈的XSS跨站脚本攻击 警惕iframe带来的风险 别被点击劫持了 错误的内容推断 防火防盗防猪队友:不安全的第三方依赖包 用了HTTPS也可能掉坑里 本地存储数据泄 ...
- 使用angularJs实现tab切换
最近的项目客户要求使用angularJs,不得不说angularJs用起来确实方便.但是有些功能事件不会的话还是会用jq.其实在使用angularJs的时候,能不用jq最后还是不用jq,以免混乱.冲突 ...
- Android典型界面设计(3)——访网易新闻实现双导航tab切换
一.问题描述 双导航tab切换(底部区块+区域内头部导航),实现方案底部区域使用FragmentTabHost+Fragment, 区域内头部导航使用ViewPager+Fragment,可在之前博客 ...
- 仿qq底部Tab导航
本篇博客主要实现以下效果: 使用FragmentTabHost实现qq底部Tab切换 使用RadioGroup和RadioButton实现仿qq底部切换 使用RadioGroup和ViewPager ...
- 高仿 自如APP 底部导航切换动画效果
code小生 一个专注大前端领域的技术平台公众号回复Android加入安卓技术群 作者:孔鹏飞 链接:https://www.jianshu.com/p/7a544cf34bcf 声明:本文已获孔鹏飞 ...
- 巧妙的有css合并图片解决tab切换的背景图片
巧妙的有css合并图片解决tab切换的背景图片 有时候做tab切换的时候 会碰到下面的这种情况 我截个图过来看看 tab切换 打开页面时候 茶庄介绍 及鼠标移上去时候 是上面这样的效果 当鼠标移下 ...
最新文章
- linux修改定时后如何保存文件夹,linux定时任务的一些相关操作汇总
- Python+opencv 机器视觉 - 基于霍夫圈变换算法检测图像中的圆形实例演示
- We will be discontinuing the Nitrous Development Platform and Cloud IDE on November 14th, 2016.
- 大数据技术 学习之旅_为什么聚焦是您数据科学之旅的关键
- unoconv 在线预览 doc,doxc,xls,xlsx,ppt,pptx 文件功能环境搭建
- CentOS7 下安装 Redis
- AttributeError : module ‘enum‘ has no attribute ‘IntFlag‘
- wordpress mysql缓存_WordPress 对象缓存与数据库缓存
- [Ext JS 4] Grid 组件
- shell 脚本初习
- python从入门到放弃表情图-[python从入门到放弃]基于百度OCR的文字识别
- 使用mysql事务管理_MySQL事务管理的介绍(附示例)
- 日志分析(shell脚本)
- 【十次方】十次方项目介绍
- MOSSE 相关滤波器详解
- 转载-史密斯(smith)圆图讲解-基础内容
- C#实现百度AI-实时语音识别转写-附源码
- shell美元符_Linux Shell中的美元符号$ | 学步园
- hdu 5956 The Elder
- 小米商城网页制作大全-完结篇