在Flatter中,实现选项卡布局简单明了.这是官方documentation强的一个简单例子:

import 'package:flutter/material.dart';

void main() {
  runApp(new TabBarDemo());
}

class TabBarDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: new DefaultTabController(
        length: 3,
        child: new Scaffold(
          appBar: new AppBar(
            bottom: new TabBar(
              tabs: [
                new Tab(icon: new Icon(Icons.directions_car)),
                new Tab(icon: new Icon(Icons.directions_transit)),
                new Tab(icon: new Icon(Icons.directions_bike)),
              ],
            ),
            title: new Text('Tabs Demo'),
          ),
          body: new TabBarView(
            children: [
              new Icon(Icons.directions_car),
              new Icon(Icons.directions_transit),
              new Icon(Icons.directions_bike),
            ],
          ),
        ),
      ),
    );
  }
}

但事情是这样的,我想要获得活动选项卡索引,这样我就可以在某些选项卡上应用一些逻辑.我搜索了文档,但我没能弄清楚.你们能帮忙谢谢吗?

推荐答案

DefaultTabController的全部意义在于它可以自己管理选项卡.

如果您需要一些自定义选项卡管理,请改用TabController. 使用TabController,您可以访问更多信息,包括当前索引.

class MyTabbedPage extends StatefulWidget {
  const MyTabbedPage({Key key}) : super(key: key);
  @override
  _MyTabbedPageState createState() => new _MyTabbedPageState();
}

class _MyTabbedPageState extends State<MyTabbedPage>
    with SingleTickerProviderStateMixin {
  final List<Tab> myTabs = <Tab>[
    new Tab(text: 'LEFT'),
    new Tab(text: 'RIGHT'),
  ];

  TabController _tabController;

  @override
  void initState() {
    super.initState();
    _tabController = new TabController(vsync: this, length: myTabs.length);
  }

  @override
  void dispose() {
    _tabController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        bottom: new TabBar(
          controller: _tabController,
          tabs: myTabs,
        ),
      ),
      body: new TabBarView(
        controller: _tabController,
        children: myTabs.map((Tab tab) {
          return new Center(child: new Text(tab.text));
        }).toList(),
      ),
    );
  }
}

Flutter相关问答推荐

如何在列表磁贴上添加行

未处理异常:字符串类型不是值类型子类型的子类型'

如何在不使用NULL-check(!)的情况下缩小`FutureBuilder.Builder()`内部的`Snaphot`范围

无法将Flutter 连接到Firebase

为什么Riverpod生成器在这种情况下不生成AsyncNotiator?

我有一个问题:类型';()=>;Null';不是类型转换中类型';(Int)=>;void';的子类型

如何组合匹配器

使用 Flutter 显示/隐藏带有下拉抽屉动画的小部件

Supabase Auth:重定向到 Google.com 而不是我的应用程序

如何使自动焦点位于已经有一些文本的 TextField 的第一行?

用户文档 ID 与 Firestore 中的用户 ID 相同

Flutter 自定义对齐

如何制作flutter showDialog、AlertDialog屏障 colored颜色 渐变

Flutter 错误:OutletListModel类型的值不能分配给List类型的变量?

当我将主题更改为深色然后返回浅色模式时,Getx 会Flutter 更改主题,它不会加载我的自定义主题

在不丢失游戏状态的情况下从 Flame 游戏导航到 Flutter 小部件

Flutter 中出现错误空判断运算符用于空值

如何将变量翻译成其他语言

是否可以在 Flutter 中使用 ToggleButtons 在页面 PageView 之间切换?

在自动完成中 Select 值后保持键盘焦点