Flutter-TabBar的使用说明

Flutter-TabBar的使用说明

在AppBar中有一个非常重要的Widget,这个Widget就是bottom,bottom是一个抽象类PreferredSizeWidget,可以看到一共有5个Widget继承了它:


PreferredSizeWidget.png

这里讲解使用TabBar这一种情况

TabBar的使用需要结合AppBar,现在给出AppBar的使用说明地址:AppBar的使用说明

TabBar的定义

TabBar在使用之前,首先需要熟悉他的定义属性,现在查看常用定义属性:

const TabBar({
    Key key,
    @required this.tabs,//必须实现的,设置需要展示的tabs,最少需要两个
    this.controller,
    this.isScrollable = false,//是否需要滚动,true为需要
    this.indicatorColor,//选中下划线的颜色
    this.indicatorWeight = 2.0,//选中下划线的高度,值越大高度越高,默认为2
    this.indicatorPadding = EdgeInsets.zero,
    this.indicator,//用于设定选中状态下的展示样式
    this.indicatorSize,//选中下划线的长度,label时跟文字内容长度一样,tab时跟一个Tab的长度一样
    this.labelColor,//设置选中时的字体颜色,tabs里面的字体样式优先级最高
    this.labelStyle,//设置选中时的字体样式,tabs里面的字体样式优先级最高
    this.labelPadding,
    this.unselectedLabelColor,//设置未选中时的字体颜色,tabs里面的字体样式优先级最高
    this.unselectedLabelStyle,//设置未选中时的字体样式,tabs里面的字体样式优先级最高
    this.dragStartBehavior = DragStartBehavior.start,
    this.onTap,//点击事件
  })

TabBar的使用

TabBar在使用的过程中有点类似于新闻或者电商样式中有关导航条下面有一个可以滚动的一行按钮;现在给出演示代码:

Widget _appBar_bottom_demo() {
    return MaterialApp(
      home: DefaultTabController(
        length: 14,
        child: Scaffold(
          appBar: AppBar(
            primary: true,//为false的时候会影响leading,actions、titile组件,导致向上偏移
            textTheme: TextTheme(//设置AppBar上面各种字体主题色
//            title: TextStyle(color: Colors.red),
            ),
            actionsIconTheme: IconThemeData(color: Colors.blue,opacity: 0.6),//设置导航右边图标的主题色,此时iconTheme对于右边图标颜色会失效
            iconTheme: IconThemeData(color: Colors.black,opacity: 0.6),//设置AppBar上面Icon的主题颜色
            brightness: Brightness.dark,//设置导航条上面的状态栏显示字体颜色
            backgroundColor: Colors.amber,//设置背景颜色
//          shape: CircleBorder(side: BorderSide(color: Colors.red, width: 5, style: BorderStyle.solid)),//设置appbar形状
//          automaticallyImplyLeading: true,//在leading为null的时候失效

//          bottom: PreferredSize(child: Text('data'), preferredSize: Size(30, 30)),//出现在导航条底部的按钮
            bottom: TabBar(
              onTap: (int index){
                print('Selected......$index');
              },
              unselectedLabelColor: Colors.grey,//设置未选中时的字体颜色,tabs里面的字体样式优先级最高
                unselectedLabelStyle: TextStyle(fontSize: 20),//设置未选中时的字体样式,tabs里面的字体样式优先级最高
              labelColor: Colors.black,//设置选中时的字体颜色,tabs里面的字体样式优先级最高
                labelStyle: TextStyle(fontSize: 20.0),//设置选中时的字体样式,tabs里面的字体样式优先级最高
              isScrollable: true,//允许左右滚动
                indicatorColor: Colors.red,//选中下划线的颜色
                indicatorSize: TabBarIndicatorSize.label,//选中下划线的长度,label时跟文字内容长度一样,tab时跟一个Tab的长度一样
                indicatorWeight: 6.0,//选中下划线的高度,值越大高度越高,默认为2。0
//                indicator: BoxDecoration(),//用于设定选中状态下的展示样式
                tabs: [
                  Text('精选',style: TextStyle(
                    color: Colors.green,
                    fontSize: 16.0
                  ),),
                  Text('猜你喜欢',style: TextStyle(
                    color: Colors.indigoAccent,
                    fontSize: 16.0
                  ),),
                  Text('母婴'),
                  Text('儿童'),
                  Text('女装'),
                  Text('百货'),
                  Text('美食'),
                  Text('美妆'),
                  Text('母婴'),
                  Text('儿童'),
                  Text('女装'),
                  Text('百货'),
                  Text('美食'),
                  Text('美妆'),
                ]
            ),
            centerTitle: true,
            title: Text('AppBar Demo'),
            leading: IconButton(
                icon: Icon(Icons.add),
                onPressed: (){
                  print('add click....');
                }
            ),
            actions: <Widget>[
              IconButton(icon: Icon(Icons.search), onPressed: (){print('search....');}),
              IconButton(icon: Icon(Icons.history), onPressed: (){print('history....');}),
            ],
          ),
          body: TabBarView(
              children: [
                Text('精选'),
                Text('猜你喜欢'),
                Text('母婴'),
                Text('儿童'),
                Text('女装'),
                Text('百货'),
                Text('美食'),
                Text('美妆'),
                Text('母婴'),
                Text('儿童'),
                Text('女装'),
                Text('百货'),
                Text('美食'),
                Text('美妆'),
              ]
          ),
        ),
      ),
    );
  }

运行起来后,就能明显的感受到TabBar能给项目带来的好处。


tabbar.jpg

DefaultTabController中需要注意事项

DefaultTabController中有两个属性需要特别注意:length和child中关于Scaffold下面的body属性的TabBarView
来看下有关DefaultTabController的定义:

const DefaultTabController({
    Key key,
    @required this.length,//设置长度,此属性的长度设置一定要与AppBar中bottom的tabs的个数相一致,不然会报错
    this.initialIndex = 0,//默认选座第0个,可以设置选择第几个
    @required this.child,//设置子Widgets,子Widgets中的children个数也一定要与length相匹配
  })
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容