精华内容
下载资源
问答
  • Flutter TabBar

    2020-11-18 14:33:49
    Flutter TabBar TabBar class FirstTabBarDemo extends StatefulWidget { @override _FirstTabBarDemoState createState() => _FirstTabBarDemoState(); } class _FirstTabBarDemoState extends State<...

    Flutter TabBar

    1. TabBar
    class FirstTabBarDemo extends StatefulWidget {
      @override
      _FirstTabBarDemoState createState() => _FirstTabBarDemoState();
    }
    
    class _FirstTabBarDemoState extends State<FirstTabBarDemo> with SingleTickerProviderStateMixin{
    
      TabController _tabController;
    
      @override
      void initState() {
        super.initState();
        // 长度要和展示部分的Tab数一致
        _tabController = TabController(vsync: this, length: 7);
      }
    
      @override
      void dispose() {
        _tabController.dispose();
        super.dispose();
      }
    
      @override
      Widget build(BuildContext context) {
        return SizedBox(
          height: 500,
          child: Scaffold(
            appBar: AppBar(title: Text('选项卡'), leading: Icon(Icons.arrow_back_ios), backgroundColor: Colors.green,
                bottom: TabBar(
                  // 是否可以滚动
                  isScrollable: true,
                  controller: _tabController,
                  tabs: [
                    Tab(text: '科技', icon: Icon(Icons.camera),),
                    Tab(text: '房产', icon: Icon(Icons.camera),),
                    Tab(text: '体育', icon: Icon(Icons.camera),),
                    Tab(text: '教育', icon: Icon(Icons.camera),),
                    Tab(text: '娱乐', icon: Icon(Icons.camera),),
                    Tab(text: '电影', icon: Icon(Icons.camera),),
                    Tab(text: '生活', icon: Icon(Icons.camera),),
                  ],
                ),),
            body: TabBarView(
                controller: _tabController,
                children: <Widget> [
                  Text('选项卡1'),
                  Text('选项卡2'),
                  Text('选项卡3'),
                  Text('选项卡4'),
                  Text('选项卡5'),
                  Text('选项卡6'),
                  Text('选项卡7'),
                ]
            ),
          ),
        );
      }
    }
    
    1. 图片
      在这里插入图片描述
    展开全文
  • flutter tabbar

    2020-07-31 21:51:06
    import 'package:flutter/material.dart'; import 'package:amap_map_fluttify/amap_map_fluttify.dart'; import 'package:day_dream/utils/translate_util.dart' as T; import 'package:day_dream/common/utils/px...
    import 'package:flutter/material.dart';
    
    import 'package:amap_map_fluttify/amap_map_fluttify.dart';
    import 'package:day_dream/utils/translate_util.dart' as T;
    import 'package:day_dream/common/utils/px_utils.dart';
    
    class MainRecommendCity extends StatefulWidget {
      @override
      _MainRecommendCityState createState() => _MainRecommendCityState();
    }
    
    class _MainRecommendCityState extends State<MainRecommendCity>
        with SingleTickerProviderStateMixin {
      TextStyle tabStyle = TextStyle(fontSize: sp(36), fontWeight: FontWeight.w400);
      TabController _tabController2;
      List tabs = ["全部", "男生", "女生"];
      List list=["确认","取消"];
      TabController _tabController;//初始化、、、
    
      @override
      void initState() {
        super.initState();
        // 创建Controller
        _tabController = TabController(length: tabs.length, vsync: this);//初始化
       // _tabController2=TabController(length: list.length, vsync: this);
       //设置点击事件
        _tabController.addListener(() {
          switch (_tabController.index) {
            case 1:
              break;
            case 2:
              break;
            case 3:
              break;
          }
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text("附近搜索"),
            actions: <Widget>[
              IconButton(
                icon: Icon(Icons.settings, color: Colors.white), //自定义图标
                onPressed: () {
                  // 打开抽屉菜单
                  // Scaffold.of(context).openDrawer();
                  showModalBottomSheet(
                      context: context,
                      isScrollControlled: false,
                      backgroundColor: Colors.white,
                      shape: RoundedRectangleBorder(
                          borderRadius: BorderRadius.all(Radius.circular(10))),
                      builder: (BuildContext context) {
                        return Column(
                          mainAxisSize: MainAxisSize.min,
                          crossAxisAlignment: CrossAxisAlignment.center,
                          children: <Widget>[
                            Text("筛选设置"),
                            Align(
                                alignment: Alignment.centerLeft,
                             // left:1.0,
                                child: Text("想看到的用户")),
                            Center(
                              child: TabBar(
                                controller: _tabController,
                                tabs: tabs.map((e) => Tab(text: e)).toList()
    
    
                                ,
                                indicator: BoxDecoration(
                                    borderRadius:
                                        BorderRadius.all(Radius.circular(w(100))),//圆角
                                    color: Color.fromARGB(255, 0x15, 0x15, 0x15)),
                                labelColor: Colors.white,
                                unselectedLabelColor:
                                    Color.fromARGB(255, 0x15, 0x15, 0x15),
                              ),
    //                    child: Row(
    //                        crossAxisAlignment: CrossAxisAlignment.center,
    //                        children: <Widget>[
    //                          Expanded(flex: 1, child:
    //                          OutlineButton(
    //                            child: Text("全部"),
    //                            shape:RoundedRectangleBorder(borderRadius: BorderRadius.circular(20.0)),
    //                            onPressed: () {},
    //                          )),
    //                          Expanded(flex: 1, child:
    //                          OutlineButton(
    //                            child: Text("男性"),
    //                            shape:RoundedRectangleBorder(borderRadius: BorderRadius.circular(20.0)),
    //                            onPressed: () {},
    //                          )),
    //                          Expanded(
    //                              flex: 1,
    //                              child: OutlineButton(
    //                                child: Text("女性"),
    //                               //  highlightColor :Colors.black,
    //                                shape:RoundedRectangleBorder(borderRadius: BorderRadius.circular(20.0)),
    //                                onPressed: () {},
    //                              )),
    //                        ]
    //
    //                    ),
                            ),
                            Center(
                              child:
    //                          TabBar(
    //                            controller: _tabController2,
    //                            tabs: list.map((e) => Tab(text: e)).toList()
    //
    //
    //                            ,
    //                            indicator: BoxDecoration(
    //                                borderRadius:
    //                                BorderRadius.all(Radius.circular(w(100))),
    //                                color: Color.fromARGB(255, 0x15, 0x15, 0x15)),
    //                            labelColor: Colors.white,
    //                            unselectedLabelColor:
    //                            Color.fromARGB(255, 0x15, 0x15, 0x15),
    //                          ),
    
                              Row(
                                crossAxisAlignment: CrossAxisAlignment.center,
                                children: <Widget>[
                                  Expanded(
                                      flex: 1,
                                      child: Align(
                                          alignment: Alignment.bottomLeft,
                                          child: OutlineButton(
                                            child: Text("取消"),
                                            shape: RoundedRectangleBorder(
                                                borderRadius:
                                                    BorderRadius.circular(20.0)),
                                            onPressed: () {},
                                          ))),
                                  Expanded(
                                      flex: 1,
                                      child: Align(
                                          alignment: Alignment.bottomRight,
                                          child: OutlineButton(
                                            disabledBorderColor: Colors.black,
                                            shape: RoundedRectangleBorder(
                                                borderRadius: BorderRadius.circular(
                                                    20.0)), //圆角
                                            child: Text("确认"),
                                            onPressed: () {},
                                          )))
                                ],
                              ),
                            ),
                          ],
                        );
                      });
                },
              )
            ],
          ),
          body:AmapView()//Text("1")// AmapView(),
        );
      }
    }
    
    展开全文
  • Flutter TabBar 标签

    2019-08-20 00:38:25
    Flutter TabBar 标签 Flutter 实现标签左右滑动切换,可以使用 TabBar 和 TabBarView。TabBar 和 TabBarView 分别表示标签和标签对应的内容页面。 TabBar TabBar 需要指定一个 TabController 才能使用,...

    Flutter TabBar 标签

    Flutter 实现标签左右滑动切换,可以使用 TabBar 和 TabBarView。TabBar 和 TabBarView 分别表示标签和标签对应的内容页面。

    TabBar

    TabBar 需要指定一个 TabController 才能使用,TabController 用来控制 TabBar 的切换。

    unselectedLabelColor: 未选中的标签的颜色。

    labelColor:选中的标签的颜色。

    indicatorColor:标签下方指示器线条的颜色。

    indicatorSize:标签下方指示器线条的长度。如果是 label,表示和标签内容长度一样,如果是 tab,表示和整个标签长度一样长,即上一个标签的右边到下一个标签左边的长度。

    tabs:表示每个标签的 widget。

                  Container(
                    constraints: BoxConstraints.expand(height: 50),
                    child: TabBar(
                        controller: _controller,
                        unselectedLabelColor: Colors.black,
                        labelColor: Colors.blue,
                        indicatorColor: Colors.blue,
                        indicatorSize: TabBarIndicatorSize.label,
                        tabs: [
                          Tab(text: "未结束"),
                          Tab(text: "已结束"),
                          Tab(text: "我的比赛")
                        ]),
                  ),
    

    TabBarView

    TabBarView 指的是每个标签对应的内容界面,这个设置成 Expanded 可以扩展到整个内容区域。

    TabBarView 也需要指定 TabController 和 每个标签下的 widget。

                  Expanded(
                    child: TabBarView(controller: _controller, children: [
                      ScoreListWidget(_isLoaded, _unFinishedMatches),
                      ScoreListWidget(_isLoaded, _finishedMatches),
                      Center(child: Text("我的比赛"))
                    ]),
                  )
    

    TabController

    TabController 用来控制内容切换,可以将 TabBar 和 TabBarView 嵌套在一个 DefaultTabController 中。也可以使用自定义的 TabController。

        _controller = TabController(length: 3, vsync: ScrollableState());
        _controller.addListener(() => {
              setState(() {
                if (_controller.index == 0) {
                  // ...
                }
              })
            });
    

    TabController 通过 length 指定标签的个数。addListener 可以添加标签的滑动监听。

    展开全文
  • Flutter TabBar TabBarView

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

    Flutter TabBar TabBarView

    Flutter 系列文章 总体目录

    TabBar 是一排水平的标签,可以来回切换,效果图:
    在这里插入图片描述

    属性 说明
    tabs 一系列标签控件
    controller 标签选择变化控制器
    isScrollable 是否可滚动,默认false
    indicatorColor 指示器颜色
    indicatorWeight 指示器粗细
    indicator 指示器,可自定义形状等样式
    indicatorSize 指示器长短,tab:和tab一样长,label:和标签label 一样长
    labelColor 标签颜色
    labelStyle 标签样式
    labelPadding 标签padding
    unselectedLabelColor 未选中标签颜色
    unselectedLabelStyle 未选中标签样式

    TabBar 一般情况下和TabBarView一起使用,TabBarView用于选择不同的TabBar,TabBarView显示对应的View
    TabBarView属性说明:

    children 一系列子控件,如果和TabBar一起使用注意和TabBar的长度一样
    controller 控制器,如果和TabBar一起使用注意和TabBar使用同一个controller

    使用:

    import 'package:flutter/material.dart';
    
    class TabBarDemo extends StatefulWidget {
      @override
      State<StatefulWidget> createState() => _TabBar();
    }
    
    class _TabBar extends State<TabBarDemo> {
      final List<String> _tabValues = [
        '语文',
        '英语',
        '化学',
        '物理',
        '数学',
        '生物',
        '体育',
        '经济',
      ];
    
      TabController _controller;
    
      @override
      void initState() {
        super.initState();
        _controller = TabController(
          length: _tabValues.length,
          vsync: ScrollableState(),
        );
      }
    
      @override
      Widget build(BuildContext context) {
        // TODO: implement build
        return Scaffold(
          appBar: AppBar(
            title: Text('TabBar'),
            bottom: TabBar(
              tabs: _tabValues.map((f) {
                return Text(f);
              }).toList(),
              controller: _controller,
              indicatorColor: Colors.red,
              indicatorSize: TabBarIndicatorSize.tab,
              isScrollable: true,
              labelColor: Colors.red,
              unselectedLabelColor: Colors.black,
              indicatorWeight: 5.0,
              labelStyle: TextStyle(height: 2),
            ),
          ),
          body: TabBarView(
            controller: _controller,
            children: _tabValues.map((f) {
              return Center(
                child: Text(f),
              );
            }).toList(),
          ),
        );
      }
    }
    
    

    效果:
    在这里插入图片描述

    Flutter-TabBar的使用说明

    Flutter-TabBar的使用说明

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

    这里讲解使用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能给项目带来的好处。
    在这里插入图片描述

    ####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相匹配
      })
    
    展开全文
  • flutter TabBar设置选中圆角背景 废话不多直接上图! 图片: 实现思路: 利用TabController.addListener()监听页面切换时,调用setState()更新UI 使用三目设置背景即可 PS. 图中下划线可以去掉,均分间距也可改为...
  • Flutter Tabbar 自定义选中下标 自定义Indicator 思考 Flutter中的Tabbar为我们提供了十分方便的下标控制器indicator,只不过系统提供的只能设置颜色,尺寸等有限的参数,面对复杂的UI设计搞,系统提供的参数可能就...
  • flutter TabBar+PageView联动

    千次阅读 2019-03-19 09:55:35
    flutter TabBar+PageView联动 ** 转自 https://www.jianshu.com/p/7f5b7e7d3c9a import 'dart:io'; import 'package:flutter/services.dart'; void main() { runApp(new MyApp()); if (Platform.isAndroid) { .....
  • 使用flutter TabBar 做自定义选项卡。 1.根据index 使用三目运算,缺点点击以后没有滑动效果。 tabs:TabMoudels.map((i) => Container( padding: EdgeInsets.all(0), height: 76.h, child: Tab( ...
  • 自定义Flutter Tabbar

    2021-04-30 04:47:10
    import 'package:flutter/material.dart'; class UiTabBar extends StatefulWidget { UiTabBar({ Key? key, this.width, this.height, this.padding = const EdgeInsets.symmetric(horizontal: 8), this....
  • flutter TabBar详解

    2020-11-10 11:29:11
    import 'package:flutter/material.dart'; class AppBarBottomSample extends StatefulWidget { @override _AppBarBottomSampleState createState() => new _AppBarBottomSampleState(); } class _...
  • FLutter tabbar样式

    2020-10-17 14:35:56
    TabBar( onTap: (index) { // print(index); }, indicatorPadding: EdgeInsets.symmetric( horizontal: ScreenUtil().setWidth(30), vertical: ScreenUtil().setWidth(15)),
  • Flutter TabBar、TabBarView的使用

    万次阅读 2019-05-23 15:56:28
    效果: 说实话,这个效果实现起来并没有我想象中的那么简单,demo跟实际开发差的还是蛮大的,一方面是学习成本,要查看源码...TabBar和TabBarView到底是什么关系呢,简而言之,TabBar就是导航栏,TabBarView就是导...
  • flutter TabBar 底部导航栏

    千次阅读 2019-07-06 17:52:26
    TabBar + TabBarView BottomNavigationBar + BottomNavigationBarItem 自定义 BottomAppBar 在这里 使用 TabBar + TabBarView 来实现,与后两者明显不同的是,前者页面可以滑动. TabBar 是一排水平的标签,可...
  • Flutter Tabbar简单样例

    2021-05-11 14:16:56
    import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class TabBarDemo extends StatefulWidget{ @override _TabBarDemoState createState()=>_TabBarDemoState(); } class _...
  • 理论上适用于大部分标签页+列表切换效果,唯一的区别就是实体类接口这块的逻辑,按照自己的项目改一改,复制下来改吧改...import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import '
  • const TabBar({ Key key, @required this.tabs,//必须实现的,设置需要展示的tabs,最少需要两个 this.controller, this.isScrollable = false,//是否需要滚动,true为需要 this.indicatorColor,//选中下划线的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,706
精华内容 682
关键字:

fluttertabbar