【问题标题】:Add Indicator on top of TabBar in Flutter在 Flutter 中的 TabBar 顶部添加指示器
【发布时间】:2020-04-23 21:00:00
【问题描述】:

喜欢这个:

下面的代码会在TabBar底部添加Indicator:

  DefaultTabController(
    length: 2,
    child : new TabBar(
      labelColor: Colors.purple,
      indicatorColor: Colors.purple,
      indicatorSize: TabBarIndicatorSize.label,
      unselectedLabelColor: Colors.black,
    tabs: [
        new Tab(icon: Icon(Icons.chrome_reader_mode),),
        new Tab(icon: Icon(Icons.clear_all),),
    ]),
  );

但我需要在TabBar 之上使用Indicator。我认为构建自定义标签栏不是一个好主意,因为我不想为这个简单的事情做很多工作。

【问题讨论】:

标签: flutter


【解决方案1】:

有一个简单的技巧,那就是使用indicator 属性并添加UnderlineTabIndicator(),并且该类具有名为insets 的命名参数,并且作为我添加的值EdgeInsets.fromLTRB(50.0, 0.0, 50.0, 40.0),

Left: 50.0, // 将指标从左边缩小 50.0

顶部:0.0,

Right: 50.0, // 使指标从右侧缩小 50.0

Bottom: 40.0 // 将指标从底部推到顶部 40.0

如下:

const textStyle = TextStyle(
    fontSize: 12.0,
    color: Colors.white,
    fontFamily: 'OpenSans',
    fontWeight: FontWeight.w600);

//.....
new TabBar(
  controller: controller,
  labelColor: Color(0xFF343434),
  labelStyle: textStyle.copyWith(
      fontSize: 20.0,
      color: Color(0xFFc9c9c9),
      fontWeight: FontWeight.w700),
  indicator: UnderlineTabIndicator(
    borderSide: BorderSide(color: Color(0xDD613896), width: 8.0),
    insets: EdgeInsets.fromLTRB(50.0, 0.0, 50.0, 40.0),
  ),
  unselectedLabelColor: Color(0xFFc9c9c9),
  unselectedLabelStyle: textStyle.copyWith(
      fontSize: 20.0,
      color: Color(0xFFc9c9c9),
      fontWeight: FontWeight.w700),
  tabs: [
    new Tab(
      text: 'LOGIN',
    ),
    new Tab(
      text: 'SIGNUP',
    ),
  ],
),

您还可以创建一个扩展 Decoration 的自定义指标

【讨论】:

    【解决方案2】:

    另一种选择是为TabBar 小部件的indicator: 属性定义一个新的Decoration,这样您就不会绑定到TabBar 高度(与使用insets: EdgeInsets.fromLTRB(50.0, 0.0, 50.0, 40.0), 一样),但您可以'不要创建比标签本身更小的指示器。

    这里是代码:

    TabBar(
      indicator: BoxDecoration(
        border: Border(
          top: BorderSide(
            color: Theme.of(context).accentColor,
            width: 3.0
          ),
        ),
      ),
    ),
    

    【讨论】:

    • 是的,我们都有限制。但您的解决方案更适合设备的响应速度。
    【解决方案3】:

    您必须为此创建一个自定义 TabController。我找到了一个 Flutter TabBar Here 的简单示例。你可以在这里详细查看。

    【讨论】:

    • 你所说的与这个问题无关。我的意思是标签上方的一行(指标)(默认在每个标签下)
    • 不,该行仅对选定的选项卡可见。
    • 不,那是抽屉的,我看不到标签栏指示器的任何变化,它位于底部而不是顶部。看上面的图片。虽然其他答案表达了一个简单的技巧,但为什么我让我的课程变得复杂。有什么原因吗?
    猜你喜欢
    • 2022-01-17
    • 2020-12-31
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多