效果图:

Home.dart

TabBarController.dart

Home.dart

import 'package:flutter/material.dart';class HomePage extends StatefulWidget {@override_HomePageState createState() => _HomePageState();
}class _HomePageState extends State<HomePage> {@overrideWidget build(BuildContext context) {return Center(child: Row(mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[RaisedButton(child: Text('跳转到appBar'),onPressed: (){//路由跳转Navigator.pushNamed(context, '/appBarDemo');},),SizedBox(width: 10,),RaisedButton(child: Text('TabController定义顶部tab切换 '),onPressed: (){//路由跳转Navigator.pushNamed(context, '/tabBarController');},)],),);}
}

TabBarController.dart

import 'package:flutter/material.dart';class TabBarControllerPage extends StatefulWidget {@override_TabBarControllerPageState createState() => _TabBarControllerPageState();
}class _TabBarControllerPageState extends State<TabBarControllerPage> with SingleTickerProviderStateMixin {TabController _tabController;   //第二种配置顶部导航的方式、@overridevoid dispose() {    //声明周期函数,销毁时调用// TODO: implement disposesuper.dispose();_tabController.dispose(); //销毁时,把_tabController也给销毁}@overridevoid initState() {    //生命周期函数,初始化时,自动调用// TODO: implement initStatesuper.initState();_tabController=new TabController(length: 2, vsync: this);   //调用构造方法初始化时,进行实例化,参数一是长度,参数二是固定写法_tabController.addListener((){print(_tabController.index);  //监听改变时的下标});}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('TabBarControllerpage'),bottom: TabBar(controller: this._tabController, //注意,这里是不一样的地方,要让controller=上面的_tabControllertabs: <Widget>[Tab(text:"热销"),Tab(text:"推荐"),],),),body: TabBarView(controller: this._tabController, //注意这里也需要配置children: <Widget>[Center(child: Text('热销'),),Center(child: Text('推荐'),),],),);}
}

还有记得配置命名路由哟:

Routes.dart

import '../pages/Tabs.dart';import 'package:flutter/material.dart';import '../pages/AppBarDemo.dart';import '../pages/TabBarController.dart';//配置路由
final  routes={                   //配置命名路由'/':(context)=>Tabs(),  //命名路由传值 arguments工具是必须的'/appBarDemo':(context)=>AppBarDemoPage(),'/tabBarController':(context)=>TabBarControllerPage()
};//固定写法
var oonGenerateRoute=(RouteSettings settings) {// 统一处理final String name = settings.name;    //得到命名路由的名字,例如:'/form'final Function pageContentBuilder = routes[name];  //得到命名路由的键去获取值,例如:(context)=>FormPage(),if (pageContentBuilder != null) {if (settings.arguments != null) {final Route route = MaterialPageRoute(builder: (context) => pageContentBuilder(context, arguments: settings.arguments));return route;} else {final Route route = MaterialPageRoute(builder: (context) => pageContentBuilder(context));return route;}}
};

Futter基础第12篇: 实现TabController定义顶部tab切换,并介绍生命周期函数相关推荐

  1. Yeslab 华为安全HCIE七门之-防火墙基础(12篇)

    Yeslab 华为安全HCIE七门之-防火墙基础(12篇) Yeslab 全套华为安全HCIE七门之第二门防火墙基础(12篇),第一门课论坛很早就有了,可自行下载,后面的陆续分享给大家. 华为安全HC ...

  2. Futter基础第3篇: 实现引用远程图片、本地图片、实现圆形图片,实现圆角图片【Image.network、Image.asset、BorderRadius.circular(150)】

    文章目录 一丶 效果图 二丶 代码+注释 三丶 知识点 一丶 效果图 [1]引用远程图片 [2]引用本地图片 [3]实现圆形图片(方法一).圆角图片(受弧度影响) [4]实现圆形图片(方法二) 二丶 ...

  3. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第12篇]椭圆曲线上的群理论是什么

    这是系列中的第12篇,我们继续数学背景的部分,通过介绍椭圆曲线的群理论- 椭圆曲线群定律是一种在一组椭圆曲线有理点中定义的二元操作来形成一个群的方法.现在,让我们看看到底什么意思,和这个东西怎么用 椭 ...

  4. .NET 并行(多核)编程系列之六 Task基础部分完结篇

    .NET 并行(多核)编程系列之六 Task基础部分完结篇 前言:之前的文章介绍了了并行编程的一些基本的,也注重的讲述了Task的一些使用方法,本篇很短,将会结束Task的基础知识的介绍. 本篇的主要 ...

  5. python turtle基本语法_Python 基础语法-turtle篇

    Python 基础语法-turtle篇 今天这节课主要讲了类的概念,并引出turtle中的函数和Turtle类. -创建一个Turtle类:brad=turtle.Turtle() -定义Turtle ...

  6. 【完结】12篇GAN的优化文章大盘点,浓浓的数学味儿

    专栏<GAN的优化>(第一季)正式完结啦! 在这一季里,我们从生成模型出发,讲述了GAN的基本理论,包括工作原理,更具有普适性的f散度度量和Wasserstein距离,以及IPM框架并顺带 ...

  7. [Qt教程] 第12篇 2D绘图(二)渐变填充

    [Qt教程] 第12篇 2D绘图(二)渐变填充 楼主  发表于 2013-4-23 17:59:31 | 查看: 689| 回复: 1 渐变填充 版权声明 该文章原创于Qter开源社区,作者yafei ...

  8. 每个程序员都必读的12篇文章

    作为一名Java程序员和软件开发人员,那些每个程序员都应该知道的XXX的文章教会了我不少东西,它们提供了某个特定领域的一些实用的并且有深度的信息,这些东西通常很难找到. 在我学习的过程中我读到过许多非 ...

  9. 深度学习之对象检测_深度学习时代您应该阅读的12篇文章,以了解对象检测

    深度学习之对象检测 前言 (Foreword) As the second article in the "Papers You Should Read" series, we a ...

  10. JavaScript 基础知识 - BOM篇

    前言 本篇文章是JavaScript基础知识的BOM篇,如果前面的<JavaScript基础知识-DOM篇>看完了,现在就可以学习BOM了. 注意: 所有的案例都在这里链接: 提取密码密码 ...

最新文章

  1. 机器学习笔记——皮尔逊相关系数
  2. ActiveMQ跟SpringBoot整合的双向队列
  3. Java中HashMap、LinkedHashMap和TreeMap区别使用场景
  4. 动作基类 CCAction
  5. Linux下定时器使用
  6. 一杯水怎么测试_每滴都是“芯”鲜好水,碧然德新款净水器实测
  7. 进入Docker容器的4种方式
  8. 郑州大学c语言课程设计2000行,C语言课程设计大作业(1).pptx
  9. mfc 如何将cstring转byte_如何将PDF转成JPG?PDF转图片的技巧
  10. 【水果蔬菜识别】基于matlab GUI形态学水果蔬菜识别【含Matlab源码 919期】
  11. 小企业主代理记账基础知识
  12. Python暴力破解ZIP文件密码
  13. 操作系统-速记版(个人幕布导出)
  14. 固态硬盘的计算机需要进行磁盘碎片整理吗,有问有答:固态硬盘需要磁盘碎片整理吗?...
  15. dh参数逆运动学_UR机械臂运动学正逆解方法
  16. 用友U8数据备份实例工作经验
  17. 二十五个软件测试经典面试题,你确定不收藏一波?
  18. 于的繁体字有几种写法_处字的繁体字书法作品图片
  19. EEGLAB系列教程5:数据预处理2(ICA去伪迹)
  20. 高薪诚聘中高级软件工程师

热门文章

  1. vs code 的便捷使用
  2. ehcache讲解及实例
  3. 检测手机屏幕是否亮屏解锁
  4. 12通过作用域链实现闭包
  5. 剖析Android Traceview效率工具及两种建SDcard方式
  6. WWW2022 | 知识提示的预训练微调
  7. EMNLP 2020 可解释性推理
  8. 一份最新的、全面的NLP文本分类综述
  9. 【论文分享】PathQG: 基于事实的神经问题生成
  10. 【QA】揭开知识库问答KB-QA的面纱1·简介篇