Flutter组件--TabBar使用详情(分段控制器)

news2024/10/7 12:24:33

TabBar介绍

一个显示水平行选项卡的Widget。 通常创建为 AppBar 的 AppBar.bottom 部分并与 TabBarView 结合使用

在什么情况下使用TabBar

当你的app内容类别比较多的时候,我们常常会用到TabBar,例如网易新闻、京东、B站等,所以TabBar是一个使用非常频繁的组件。

如何创建

步骤一:创建TabController

为了使所选的 tab 与它所对应的内容能够同步变化,需要用 TabController 进行控制。我们既可以手动创建一个 TabController ,也能够直接使用 DefaultTabController widget。最简单的选择是使用 DefaultTabController widget,因为它能够创建出一个可供所有子 widgets 使用的 TabController

DefaultTabController(
  // 选项卡的数量
  length: 3,
  child: // 在下一步完成此代码
);

步骤二:创建tabs

当我们创建DefaultTabController, 接下来就可以用 TabBar widget 来创建 tabs。下面这个创建了包含三组 Tab widget 的 TabBar(一个),并把它放置于 AppBar widget 中。

DefaultTabController(
  length: 3,
  child: Scaffold(
    appBar: AppBar(
      title: Text("TabBar"),
      bottom: TabBar(
        tabs: [
          Tab(icon: Icon(Icons.directions_bike),),
          Tab(icon: Icon(Icons.directions_boat),),
          Tab(icon: Icon(Icons.directions_car),),
        ],
      ),
    ),
  ),
);

步骤三:为每个Tab创建内容

现在我们已经成功创建了一些 tabs,接下来要实现的是 tab 被选中时显示其对应的内容。为了实现这个效果,我们将使用 TabBarView widget。

import 'package:flutter/material.dart';

class TabBarExample extends StatefulWidget {
  @override
  _TabBarExampleState createState() => _TabBarExampleState();
}

class _TabBarExampleState extends State<TabBarExample> {
  @override
  Widget build(BuildContext context) {
    return DefaultTabController(
      length: 3,
      child: Scaffold(
        appBar: AppBar(
          title: Text("TabBar"),
          bottom: TabBar(
            tabs: [
              Tab(icon: Icon(Icons.directions_bike),),
              Tab(icon: Icon(Icons.directions_boat),),
              Tab(icon: Icon(Icons.directions_car),),
            ],
          ),
        ),
        body: TabBarView(
          children: [
            Icon(Icons.directions_bike),
            Icon(Icons.directions_boat),
            Icon(Icons.directions_car),
          ],
        ),
      ),
    );
  }
}

TabBar效果图


​​​​​​​

 

TabBar属性和说明

序列号字段属性描述
1tabsList两个多个的Tab列表
2controllerTabController控制tab的控制器
3isScrollablebool标签栏是否可以水平滚动
4indicatorColorColor设置选中Tab指示器的颜色
5automaticIndicatorColorAdjustmentbool是否自动调整indicatorColor
6indicatorWeightdouble设置选中Tab指示器线条的粗细
7indicatorPaddingEdgeInsetsGeometry设置选中Tab指示器间距,默认值为 EdgeInsets.zero
8indicatorDecoration设置选中Tab指示器的外观
9indicatorSizeTabBarIndicatorSize设置选中Tab指示器的大小
10labelColorColor设置选中Tab文字的颜色
11labelStyleTextStyle设置选中Tab文字的样式
12labelPaddingEdgeInsetsGeometry设置选中Tab文字的间距
13unselectedLabelColorColor设置未选中Tab文字的颜色
14unselectedLabelStyleTextStyle设置未选中Tab文字的样式
15dragStartBehaviorDragStartBehavior处理拖动开始行为的方式
16overlayColorMaterialStateProperty定义响应焦点、悬停和飞溅颜色
17mouseCursorMouseCursor鼠标指针进入或悬停在鼠标指针上时的光标
18enableFeedbackbool检测到的手势是否应提供声音和/或触觉反馈
19onTapValueChanged单击Tab时的回调
20physicsScrollPhysicsTabBar的滚动视图如何响应用户输入

TabBar属性详细使用

1.tabs

由两个多个组成的Tab列表

TabBar(
  tabs: [
    Tab(icon: Icon(Icons.directions_bike),),
    Tab(icon: Icon(Icons.directions_boat),),
    Tab(icon: Icon(Icons.directions_car),),
  ],
)

2.controller

可以控制tab的控制器

TabController _tabController;

@override
void initState() {
  // TODO: implement initState
  super.initState();
  _tabController = TabController(length: 3, vsync: this);
}

TabBar(
  controller: _tabController,
  tabs: [
    Tab(icon: Icon(Icons.directions_bike),),
    Tab(icon: Icon(Icons.directions_boat),),
    Tab(icon: Icon(Icons.directions_car),),
  ],
)

3.isScrollable

标签栏是否可以水平滚动

TabBar(
  isScrollable: false,
  tabs: [
    Tab(icon: Icon(Icons.directions_bike),),
    Tab(icon: Icon(Icons.directions_boat),),
    Tab(icon: Icon(Icons.directions_car),),
  ],
)

4.indicatorColor

设置选中Tab指示器的颜色

TabBar(
  indicatorColor: Colors.red,
  tabs: [
    Tab(icon: Icon(Icons.directions_bike),),
    Tab(icon: Icon(Icons.directions_boat),),
    Tab(icon: Icon(Icons.directions_car),),
  ],
)

5.automaticIndicatorColorAdjustment

是否自动调整 indicatorColor,如果 automaticIndicatorColorAdjustment 为 true 时,那么indicatorColor 会自动调整成 Colors.white

TabBar(
  automaticIndicatorColorAdjustment: false,
  tabs: [
    Tab(icon: Icon(Icons.directions_bike),),
    Tab(icon: Icon(Icons.directions_boat),),
    Tab(icon: Icon(Icons.directions_car),),
  ],
)

6.indicatorWeight

设置选中Tab指示器线条的粗细

TabBar(
  indicatorColor: Colors.red,
  indicatorWeight: 5,
  tabs: [
    Tab(icon: Icon(Icons.directions_bike),),
    Tab(icon: Icon(Icons.directions_boat),),
    Tab(icon: Icon(Icons.directions_car),),
  ],
)

7.indicatorPadding

设置选中Tab指示器间距,默认值为 EdgeInsets.zero

TabBar(
  indicatorColor: Colors.red,
  indicatorWeight: 5,
  indicatorPadding: EdgeInsets.only(bottom: 2),
  tabs: [
    Tab(icon: Icon(Icons.directions_bike),),
    Tab(icon: Icon(Icons.directions_boat),),
    Tab(icon: Icon(Icons.directions_car),),
  ],
)

8.indicator

设置选中Tab指示器的外观

TabBar(
  indicatorColor: Colors.red,
  indicatorWeight: 5,
  indicatorPadding: EdgeInsets.only(bottom: 2),
  indicator: BoxDecoration(
    gradient: LinearGradient(colors: [
      Colors.orange,
      Colors.green
    ]),
  ),
  tabs: [
    Tab(icon: Icon(Icons.directions_bike),),
    Tab(icon: Icon(Icons.directions_boat),),
    Tab(icon: Icon(Icons.directions_car),),
  ],
)

9.indicatorSize

设置选中Tab指示器的大小,该值是一个枚举类型,TabBarIndicatorSize.tab 跟随 Tab 的宽度,TabBarIndicatorSize.label 跟随 Tab 内容文字的宽度。

TabBar(
  indicatorColor: Colors.red,
  indicatorSize: TabBarIndicatorSize.tab,
  tabs: [
    Tab(icon: Icon(Icons.directions_bike),),
    Tab(icon: Icon(Icons.directions_boat),),
    Tab(icon: Icon(Icons.directions_car),),
  ],
)

10.labelColor

设置选中Tab文字的颜色

TabBar(
  indicatorColor: Colors.red,
  labelColor: Colors.pink,
  tabs: [
    Tab(icon: Icon(Icons.directions_bike),),
    Tab(icon: Icon(Icons.directions_boat),),
    Tab(icon: Icon(Icons.directions_car),),
  ],
)

11.labelStyle

设置选中Tab文字的样式

TabBar(
  labelStyle: TextStyle(
    backgroundColor: Colors.green,
    fontSize: 20
  ),
  tabs: [
    Tab(icon: Icon(Icons.directions_bike), text: "单车",),
    Tab(icon: Icon(Icons.directions_boat), text: "轮船",),
    Tab(icon: Icon(Icons.directions_car), text: "汽车",),
  ],
)

12.labelPadding

设置选中Tab内容的间距

TabBar(
  labelStyle: TextStyle(
    backgroundColor: Colors.green,
    fontSize: 20
  ),
  labelPadding: EdgeInsets.all(0),
  tabs: [
    Tab(icon: Icon(Icons.directions_bike), text: "单车",),
    Tab(icon: Icon(Icons.directions_boat), text: "轮船",),
    Tab(icon: Icon(Icons.directions_car), text: "汽车",),
  ],
)

13.unselectedLabelColor

设置未选中Tab文字的颜色

TabBar(
	unselectedLabelColor: Colors.orange,
  tabs: [
    Tab(icon: Icon(Icons.directions_bike), text: "单车",),
    Tab(icon: Icon(Icons.directions_boat), text: "轮船",),
    Tab(icon: Icon(Icons.directions_car), text: "汽车",),
  ],
)

14.unselectedLabelStyle

设置未选中Tab文字的样式

TabBar(
	unselectedLabelColor: Colors.orange,
  unselectedLabelStyle: TextStyle(
    backgroundColor: Colors.pink
  ),
  tabs: [
    Tab(icon: Icon(Icons.directions_bike), text: "单车",),
    Tab(icon: Icon(Icons.directions_boat), text: "轮船",),
    Tab(icon: Icon(Icons.directions_car), text: "汽车",),
  ],
)

15.dragStartBehavior

处理拖动开始行为的方式

TabBar(
	unselectedLabelColor: Colors.orange,
  unselectedLabelStyle: TextStyle(
    backgroundColor: Colors.pink
  ),
  dragStartBehavior: DragStartBehavior.start,
  tabs: [
    Tab(icon: Icon(Icons.directions_bike), text: "单车",),
    Tab(icon: Icon(Icons.directions_boat), text: "轮船",),
    Tab(icon: Icon(Icons.directions_car), text: "汽车",),
  ],
)

16.overlayColor

定义响应焦点、悬停和飞溅颜色。

17.mouseCursor

鼠标指针进入或悬停在鼠标指针上时的光标,针对 Flutter web 应用

TabBar(
	unselectedLabelColor: Colors.orange,
  unselectedLabelStyle: TextStyle(
    backgroundColor: Colors.pink
  ),
  mouseCursor: SystemMouseCursors.allScroll,
  tabs: [
    Tab(icon: Icon(Icons.directions_bike), text: "单车",),
    Tab(icon: Icon(Icons.directions_boat), text: "轮船",),
    Tab(icon: Icon(Icons.directions_car), text: "汽车",),
  ],
)

18.enableFeedback

检测到的手势是否应提供声音和/或触觉反馈,默认为 true

TabBar(
  enableFeedback: true,
  tabs: [
    Tab(icon: Icon(Icons.directions_bike), text: "单车",),
    Tab(icon: Icon(Icons.directions_boat), text: "轮船",),
    Tab(icon: Icon(Icons.directions_car), text: "汽车",),
  ],
)

19.onTap

单击Tab时的回调

TabBar(
  enableFeedback: true,
  onTap: (index) {
    print(index);
  },
  tabs: [
    Tab(icon: Icon(Icons.directions_bike), text: "单车",),
    Tab(icon: Icon(Icons.directions_boat), text: "轮船",),
    Tab(icon: Icon(Icons.directions_car), text: "汽车",),
  ],
)

20.physics

TabBar的滚动视图如何响应用户输入,

例如,确定在用户停止拖动滚动视图后滚动视图如何继续动画

TabBar(
  physics: NeverScrollableScrollPhysics(),
  tabs: [
    Tab(icon: Icon(Icons.directions_bike), text: "单车",),
    Tab(icon: Icon(Icons.directions_boat), text: "轮船",),
    Tab(icon: Icon(Icons.directions_car), text: "汽车",),
  ],
)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/25235.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CentOS7 设置 MySQL 主备同步

文章目录环境准备修改配置文件创建同步数据账户设置主库信息测试参考资料本文主要介绍在 MySQL 的主备同步设置方法。环境准备 Linux&#xff1a;Centos 7 MySQL&#xff1a;5.7 主节点&#xff1a;192.168.210.18 备节点&#xff1a;192.168.210.19 主备节点 MySQL 均支持…

2022 Android 高级进阶学习资料与高频精选面试题精讲(圆梦大厂)

序言 可能每个技术人都有个大厂梦&#xff0c;我也不例外。最近准备跳槽&#xff0c;前一阵子在准备各种面试&#xff0c;也面了几个大厂&#xff0c;其中包括字节、阿里 就以字节面试为例&#xff0c;面试总共花费了 20 天左右&#xff0c;包含了 4 轮电话面试、1 轮笔试、1 轮…

锐捷OSPF基础实验配置

目录 配置基础的邻居建立 配置Area4的虚链路 配置OSPF特殊区域 配置路由重分发 配置OSPF汇总 下发缺省路由 配置OSPF邻居认证 配置OSPF的网络类型 配置基础的邻居建立 以R1和R2建立邻居为例子&#xff08;其余设备邻居建立配置相同&#xff09; R1配置 int g0/0 no swi…

安泰测试-矢量网络分析仪有哪些应用?

网络分析仪可用于表征射频(RF)器件。尽管最初只是测量 S 参数&#xff0c;但为了优于被测器件&#xff0c;现在的网络分析仪已经高度集成&#xff0c;并且非常先进。 射频电路需要独特的测试方法。在高频内很难直接测量电压和电流&#xff0c;因此在测量高频器件时&#xff0c…

电话语音控件:AddTapi.NET 6.0 Crack

关于 AddTapi.NET 轻松地将电话 (TAPI) 功能添加到您的 C#、VB.NET 或 C 应用程序。 AddTapi.NET 支持 Microsoft 电话应用程序编程接口 (TAPI) 1.3 - 3.1&#xff0c;并适用于所有与 TAPI 兼容的电话硬件&#xff0c;从语音调制解调器到高级电话板再到与 TAPI 兼容的 PBX 系统…

2.9 Python 流程控制

文章目录1. 流程控制2. 顺序结构3. 伪代码4. 流程图4.1 顺序结构4.2 分支结构4.3 多分支结构4.4 循环结构1. 流程控制 流程控制: 控制程序按照一定的结构进行执行. 流程控制指的是代码的运行逻辑, 分支走向, 循环控制, 能真正体现程序执行顺序的操作.* 1966年计算机科学家 C.B…

pikachu---暴力破解(burpsuite)

没有设置认证策略的情况下&#xff0c;口令猜测就是尝试&#xff0c;永无尽头的尝试 符号的排列组合试到最后&#xff0c;总能得出最终结果&#xff0c;人类大脑和生理的限制&#xff0c;需要使用工具来尝试。 前言 浅学&#xff0c;借鉴&#xff0c;暂无代码分析。 基于表…

中职生学习动机的激发与培养研究-以汽车运用与维修专业为例

目 录 摘 要 I Abstract II 一、绪论 1 &#xff08;一&#xff09;选题背景及意义 1 &#xff08;二&#xff09;国内外研究现状 1 1.国外发展现状及趋势 1 2.国内发展现状及趋势 3 &#xff08;三&#xff09;研究思路及方法 3 二、学习动机的含义及基本类型 5 &#xff08;一…

python之requests的高级用法

上一篇我们说了requests的简单用法&#xff0c;知道了如何发送请求&#xff0c;今天我们更深层次的来学习requests。我们看看高级一点的操作&#xff0c;比如讲文件上传&#xff0c;cookies设置&#xff0c;代理设置之类的。 1.文件上传 我们知道requests可以模拟提交一些数据…

UE5笔记【七】Nanite虚化几何-虚化几何简介;创建Nanite对象。

简书上有一篇文章&#xff1a;《【UE5】Nanite解析》 Epic外放的两大特性Nanite跟Lumen&#xff0c;构成了UE版本升级的基石&#xff0c;关于这两大技术&#xff0c;已经有了众多的分享&#xff0c;不过这些分享在结构和内容上难以构成整个方案的全貌&#xff0c;因此尝试先通…

Zero Time Waste: Recycling Predictions in Early Exit Neural Networks 论文阅读笔记

这是NIPS2021的一篇论文。论文的主题是解决early exit失败的时候IC的运算被浪费掉的问题。 背景介绍 early exit 是一个提高推理速度的研究方向。主要做法就是在网络的浅层特征上插入一些分支的分类器&#xff08;Internal Classifier&#xff09;。当以某个简单样本为输入的时…

SpringBoot项目实现发布订阅模式

文章目录自己实现观察者模式观察者被观察者测试利用Spring精简观察者实现类&#xff1a;定义成Bean被观察者&#xff1a;自动注入BeanSpring Event实现发布/订阅模式自定义事件事件监听者实现ApplicationListener接口使用EventListener注解异步和自定义线程池异步执行自定义线程…

SSM框架-Spring(二)

目录 1 手写spring框架 2 Spring IoC注解式开发 2.1 回顾注解 2.2 声明Bean的注解 2.3 Spring注解的使用 2.4 选择性实例化Bean 2.5 负责注入的注解 2.5.1 Value 2.5.2 Autowired与Qualifier 2.5.3 Resource 2.6 全注解式开发 3 JdbcTemplate 3.1 环境准备 3.2 新…

深化服务成工业品电商角逐新焦点

配图来自Canva可画 随着产业互联网的持续深入&#xff0c;TO B赛道就变得愈发火热起来&#xff0c;除了时下比较兴盛的各类SaaS应用之外&#xff0c;工业品电商赛道也再次汇集了外界的众多关注。据日前发布的《中国工业品数字化发展白皮书2022》显示&#xff0c;2022年上半年工…

应急响应-日志分析

Windows日志分析 日志概述在Windows系统中&#xff0c;日志文件包括:系统日志、安全性日志、应用程序日志&#xff1a; 在Windows Vista/windwos 7/windows 8/windows 10/windows server 2008及以上版本中&#xff1a; 系统日志的存放位置&#xff1a;%SystemRoot%\System32\…

【多线程 (一)】实现多线程的三种方式、线程休眠、线程优先级、守护线程

文章目录多线程1.1简单了解多线程1.2并发和并行1.3进程和线程1.4实现多线程方式一&#xff1a;继承 Thread类1.5实现多线程的方式二&#xff1a;实现 Runnable接口1.6实现多线程方式三&#xff1a;实现Callable接口1.7三种实现方式的对比1.8设置和获取线程名称1.9线程休眠1.10线…

电商网站运营的 7 大关键指标

本文介绍电商网站用户运营转化的相关指标体系&#xff0c;通过对这些指标的统计、监测和分析&#xff0c;可以及时发现电商运营的问题&#xff0c;以便有效及时改进和优化&#xff0c;提升电商转化率和销售额。 其中&#xff0c;不同类别指标对应电商运营的不同环节&#xff0…

02 使用jenkins实现K8s持续集成

1.项目架构的代码仓库使用gitlab托管 架构描述我不打算用过多文字描述了&#xff0c;来我们一起直接看图吧....二.将测试代码上传到gitlab 1.注册gitlab账户 此处使用本地搭建仓库2.创建仓库名称为"idiaoyan" 如下图所示&#xff0c;安装图解方式创建相应的用户即…

基于Multisim的LC正弦波振荡器的设计与仿真

目 录 1、绪论 1 1.1选题背景及意义 1 1.2国内外研究现状 1 1.3研究主要内容 2 2、系统整体设计 3 2.1开发环境Multisim的介绍 3 2.2方案比较与论证 4 2.2.1振荡电路方案选择 4 2.2.2 控制电路设计方案 4 2.3系统整体设计 5 3、工作原理、硬件电路的设计和参数的计算 6 3.1 反馈…

2022中科院分区表即将公布,今年迎来较大变化

再有一段时间&#xff0c;备受科研人员关注的中科院分区表就要公布了。 据中科院文献情报中心分区表小编今天留言透露&#xff0c;今年的分区表预计11月底或12月初上线。 不少科研人已经开始期待了 。和往年相比&#xff0c;今年的分区表将会有较大变化。 只有升级版期刊分区…