Tab关键元素

  • TabController
    这是Tab页的控制器,用于定义Tab标签和内容页的坐标,还可配置标签页的切换动画效果等。

TabController一般放入有状态控件中使用,以适应标签页数量和内容有动态变化的场景,如果标签页在APP中是静态固定的格局,则可以在无状态控件中加入简易版的DefaultTabController以提高运行效率,毕竟无状态控件要比有状态控件更省资源,运行效率更快。

  • TabBar
    Tab页的Title控件,切换Tab页的入口,一般放到AppBar控件下使用,内部有*Title属性。其子元素按水平横向排列布局,如果需要纵向排列,请使用ColumnListView控件包装一下。子元素为Tab类型的数组。

  • TabBarView
    Tab页的内容容器,其内放置Tab页的主体内容。子元素可以是多个各种类型的控件。

先看一下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,})
属性 意义
tabs 一般使用Tab对象,当然也可以是其他的Widget
controller TabController对象
isScrollable 是否可滚动
indicatorColor 指示器颜色
indicatorWeight 指示器厚度
indicatorPadding 底部指示器的Padding
indicator 指示器decoration,例如边框等
indicatorSize 指示器大小计算方式
labelColor 选中Tab文字颜色
labelStyle 选中Tab文字Style
unselectedLabelColor 未选中Tab中文字颜色
unselectedLabelStyle 未选中Tab中文字style

Tab使用方法

import 'package:flutter/material.dart';class MyHomePage extends StatefulWidget {@overridecreateState() => 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: '五毒'),];@overrideWidget 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 {@overrideState<StatefulWidget> createState() => TweetListState();
}class TweetListState extends State<TweetsListPage>with AutomaticKeepAliveClientMixin {@overrideWidget build(BuildContext context) {return Center(child: Text('TweetsListPage'),);}@overridevoid dispose() {print('TweetsListPage dispose');super.dispose();}// 当页面不显示的时候也常驻在内存中@overridebool get wantKeepAlive => true;
}

动态改变tab

有时候我们需要手动的改变当前显示的tab , 这时候就需要自己创建一个controller了 ,

TabController tabController;@overridevoid initState() {// TODO: implement initStatesuper.initState();tabController = TabController(length: myTabs.length, vsync: this);}

这时, 我们外面套用的 DefaultTabController 就可以去掉了 , 它的作用就是当我们没写controller的时候使用的 , 因为tabbar以及tabbarView是必须有个controller的.

执行

tabController.animateTo(index)

就会跳转到对应的tab , 当然 要在tabBar 以及tabbarView 中都设置controller .

炫酷版:

代码: github

Flutter TabBar相关推荐

  1. flutter tabBar 选项卡自定义指示器

    使用flutter TabBar 做自定义选项卡. 1.根据index  使用三目运算,缺点点击以后没有滑动效果. tabs:TabMoudels.map((i) => Container(pa ...

  2. flutter tabBar 的属性及自定义实现

    flutter tabBar 的属性及自定义实现 前言 一.TabBar是什么? 二.TabBar 自定义 三. Tab 自定义 总结 前言 在Flutter中,TabBar的indicatorPad ...

  3. Flutter TabBar 标签栏背景颜色、点击水波纹颜色配置

    题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精. Flutter是谷歌推出的最新的移动开发框架. [x1]微信公众号的每日提醒 随时随记 每日积累 随心而过 文章底部扫码关注 [x2] ...

  4. flutter TabBar 底部导航栏

    更多文章请查看 lutter从入门 到精通 实现底部导航栏并点击切换页面可简述为有三种方式 TabBar + TabBarView BottomNavigationBar + BottomNaviga ...

  5. Flutter TabBar TabBarView

    Flutter 系列文章 总体目录 TabBar 是一排水平的标签,可以来回切换,效果图: 属性 说明 tabs 一系列标签控件 controller 标签选择变化控制器 isScrollable 是 ...

  6. Flutter实现酷狗流畅Tabbar效果

    在2021年末,酷狗发布了最新版11.0.0版本,这是一次重大的UI重构,更新完打开着实让我耳目一新.在原有风格上,整个App变得更加清爽,流畅.其中Tabbar的风格让我非常感兴趣,如果用Flutt ...

  7. Flutter 项目开发指导 从基础入门到精通使用目录

    Flutter 从入门 到精通系列文章 本文章为 Flutter 开发中的经验积累分享.教程分享.开发笔记分享目录,持续维护中. 题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精. Fl ...

  8. Flutter 仿掘金之动态Tabbar

    效果 不多逼逼 Tabbar 先看Tabbar的参数 const TabBar({Key key,@required this.tabs, // itemthis.controller, //控制器t ...

  9. 【Flutter】顶部导航栏实现 ( Scaffold | DefaultTabController | TabBar | Tab | TabBarView )

    文章目录 一.Scaffold 组件 二.实现顶部导航栏 三.DefaultTabController 导航标签控制组件 四.TabBar 导航按钮组件 五.Tab 标签组件 六.TabBarView ...

最新文章

  1. 交换机定时自动备份配置文件的方法
  2. iis配置绑定二级域名的问题
  3. django连接数据库和数据迁移
  4. telnet服务器显示本机,记一次困扰了我一个月的服务器telnet故障是如何解决的?...
  5. java知识回顾_Java7 –回顾
  6. selenium-webdriver for node 鼠标滑动到指定元素
  7. html中post和get区别
  8. 系统新模块增加需要哪些步骤_防锈高效型干式地暖模块解决了装修施工配合的哪些难点?...
  9. 【BZOJ4008】【HNOI2015】亚瑟王 [期望DP]
  10. leetcode前缀树java_Java实现 LeetCode 208 实现 Trie (前缀树)
  11. pdf 分形 张济忠_分形
  12. 产品经理项目从0-1工作简要流程
  13. 如何把图片裁剪为圆形
  14. python+opencv代码给证件照换底色
  15. editplus编辑器使用-快速开始(editplus通过sftp协议远程编辑文件)
  16. IDEA 如何新建Source Folder
  17. 15个在线网站检测工具
  18. 程序输出我是java小公主,我的同学英文
  19. hdwiki can not connect to mysql_HDWIKI最新版Update注入可修改管理员密码(MYSQL进制技巧)...
  20. 大数据开源处理工具汇总

热门文章

  1. 计算机视觉学习day1
  2. 论文笔记-2019-Object Detection in 20 Years: A Survey
  3. ColorMatrix颜色矩阵让图片千变万化
  4. 基于51单片机的智能停车场车位收费系统原理图PCB
  5. 包含main函数的栈——《剑指offer》
  6. VMware使用vmdk文件安装Android
  7. LPDDR4x 的 学习总结(4) - SDRAM chip的组织结构
  8. \0 的ASCII码值是多少
  9. 和CSDN的七年之痒
  10. DES加密与解密代码