Flutter TabBar
先看一下Tab的构造方法:
TabBar({
    Key key,
    @required this.tabs,
    this.controller,
    this.isScrollable: false,
    this.indicatorColor,
    this.indicatorWeight: 2.0,
    this.indicatorPadding: EdgeInsets.zero,
    this.indicator,
    this.indicatorSize,
    this.labelColor,
    this.labelStyle,
    this.unselectedLabelColor,
    this.unselectedLabelStyle,
  })

Tab使用方法
import 'package:flutter/material.dart';
class MyHomePage extends StatefulWidget {
  @override
  createState() => new MyHomePageState();
}
class MyHomePageState extends State<MyHomePage> {
  final List<Tab> myTabs = <Tab>[
    Tab(text: '明教'),
    Tab(text: '霸刀'),
    Tab(text: '天策'),
    Tab(text: '纯阳'),
    Tab(text: '少林'),
    Tab(text: '藏剑'),
    Tab(text: '七秀'),
    Tab(text: '五毒'),
  ];
  @override
  Widget build(BuildContext context) {
    return DefaultTabController(
      length: myTabs.length,
      child: Scaffold(
        appBar: AppBar(
          backgroundColor: Colors.blue,
           title: TabBar(
            tabs: myTabs,
            isScrollable: true,
            indicatorColor: Colors.red,
            labelColor: Colors.white,
          ),
        ),
        body: TabBarView(
            children: myTabs
                .map((Tab tab) => Center(child: Text(tab.text)))
                .toList()),
      ),
    );
  }
}

Flutter切换tab后保留tab状态
Flutter中为了节约内存不会保存widget的状态,widget都是临时变量。当我们使用TabBar,TabBarView是我们就会发现,切换tab后再重新切换回上一页面,这时候tab会重新加载重新创建,体验很不友好。Flutter出于自己的设计考虑并没有延续android的ViewPager这样的缓存页面设计,毕竟控件两端都要开发,目前还在beta版本有很多设计还不够完善,但是设计的拓展性没得说,flutter还是为我们提供了解决办法。我们可以强制widget不显示情况下保留状态,下回再加载时就不用重新创建了。
AutomaticKeepAliveClientMixin
AutomaticKeepAliveClientMixin 是一个抽象状态,使用也很简单,我们只需要用我们自己的状态继承这个抽象状态,并实现 wantKeepAlive 方法即可。
继承这个状态后,widget在不显示之后也不会被销毁仍然保存在内存中,所以慎重使用这个方法。
详细官方文档请看这里。
这里还有一个说的比较详细的 demo。
/*
* Created by 李卓原 on 2018/9/13.
* email: zhuoyuan93@gmail.com
*
*/ import 'package:flutter/material.dart'; class TweetsListPage extends StatefulWidget {
@override
State<StatefulWidget> createState() => TweetListState();
} class TweetListState extends State<TweetsListPage>
with AutomaticKeepAliveClientMixin {
@override
Widget build(BuildContext context) {
return Center(
child: Text('TweetsListPage'),
);
} @override
void dispose() {
print('TweetsListPage dispose');
super.dispose();
} // 当页面不显示的时候也常驻在内存中
@override
bool get wantKeepAlive => true;
}
Flutter TabBar的更多相关文章
- Flutter - TabBar导航栏切换后,状态丢失
		
上一篇讲到了 Flutter - BottomNavigationBar底部导航栏切换后,状态丢失 里面提到了TabBar,这儿专门再写一下吧,具体怎么操作,来不让TabBar的状态丢失.毕竟大家99 ...
 - Flutter——TabBar组件(顶部Tab切换组件)
		
TabBar组件的常用属性: 属性 描述 tabs 显示的标签内容,一般使用 Tab 对象,也可以是其他的Widget controller TabController 对象 isScrollabl ...
 - flutter tabbar创建与显示
		
效果图 main.dart import 'package:flutter/material.dart'; import 'pages/index_page.dart'; void main() =& ...
 - Flutter实战视频-移动电商-46.详细页_自定义TabBar Widget
		
46.详细页_自定义TabBar Widget 主要实现详情和评论的tab provide定义变量 自己做一个tab然后用provide去控制 定义两个变量来判断是左侧选中了还是右侧选中了.并定义一个 ...
 - Flutter学习笔记(17)--顶部导航TabBar、TabBarView、DefaultTabController
		
如需转载,请注明出处:Flutter学习笔记(17)--顶部导航TabBar.TabBarView.DefaultTabController 上一篇我们说了BottmNavigationBar底部导航 ...
 - Flutter AppBar 自定义顶部导航按钮 图标、颜色 以及 TabBar 定义顶部 Tab 切换
		
Flutter AppBar 自定义顶部按钮图 标.颜色 属性 描述 leading 在标题前面显示的一个控件,在首页通常显示应用 的 logo;在其他界面通常显示为返回按钮 title 标题,通常显 ...
 - Flutter移动电商实战 --(46)详细页_自定义TabBar Widget
		
主要实现详情和评论的tab provide定义变量 自己做一个tab然后用provide去控制 定义两个变量来判断是左侧选中了还是右侧选中了.并定义一个方法来接受参数,修改是左侧还是右侧选中的状态值 ...
 - Flutter 原生TabBar切换标签页示例
		
效果图: 代码如下: import 'package:flutter/material.dart'; class TabsTestPage extends StatefulWidget { _Tabs ...
 - flutter 自定义tabbar 给tabbar添加背景功能
		
flutter 自带的tabbar BottomNavigationBar有长按水波纹效果,不可以添加背景图片功能,如果有这方面的需求,就需要自定义tabbar了 自定义图片 我们使用BottomAp ...
 
随机推荐
- Eclipse+jboss5 无法启动
			
在使用Eclipse luna 配置Jboss5 时,配置成功,但无法在eclipse 控制台上启动. log: Deployment "AttachmentStore" is i ...
 - oracle_jdbc_Query
			
本例子程序是根据马士兵老师所讲+自己的注释.写的比较全面,特别是最后释放资源的代码. package com.ayang.jdbc; import java.sql.*; public class T ...
 - centos6 和 centos7 网络配置
			
centos 6配置,1 vim /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE="eth0" BOOTPROTO="st ...
 - WordPress 主题教程
			
创建 WordPress 主题其实不难,只要你从现在开始认真学习这个教程,从零一步一步开始,你就会成为一个 WordPress 主题制作高手,至少你会修改现有主题. 下面是一个从零开始制作 WordP ...
 - CentOS6.5安装php7+nginx+mysql实现安装WordPress
			
安装php7+nginx参考该博客http://blog.csdn.net/whatday/article/details/50645117 安装php7参考http://blog.csdn.net/ ...
 - TCP连接、Http连接与Socket连接
			
1.TCP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上. ...
 - <MYSQL Index>
			
About Mysql 1. Mysql工作流程分析 2. Mysql单实例安装(5.6.31) DATABASE 1. 事务的4种隔离级别 ——————————————————Mysql管理———— ...
 - C# 实现二叉树各种排序
			
1. 引言 在实际的项目中,树还是用的比较多的一种,尤其是对于具有层次结构的数据.相信很多人都学过树的遍历,比如先序遍历,后序遍历等,利用递归还是很容易理解的. 今天给大家介绍下二叉树的几种遍历算法, ...
 - Java中泛型通配符的一点概念
			
以List<T>为例,通常如果我们想在List中存储某种类型的数据,我们会用下面的语法进行声明和使用: List<String> allMsg = new ArrayList& ...
 - Java基础教程(20)--数字和字符串
			
一.数字 在用到数字时,大多数情况下我们都会使用基本数据类型.例如: int i = 500; float gpa = 3.65f; byte mask = 0xff; 然而,有时候我们既需要 ...
 
			
		