flutter - 如何在 Flutter 中获取当前选项卡索引

在 Flutter 中实现选项卡布局简单明了。这是官方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(),
      ),
    );
  }
}

https://stackoverflow.com/questions/50123354/

相关文章:

http - 在flutter http请求中为所有请求设置默认 header 的最佳方法

dart - 如何在 flutter 中将图像转换为base64图像?

dart - 输入文本时自动扩展的 Flutter 文本字段,然后在达到特定高度时开始滚动文本

api - 为 HTTPClient get() 请求设置超时

Flutter - 容器上的叠加卡片小部件

dart - Flutter - 无法构建,因为框架已经在构建

android - 使用 google dart 语言的原生移动应用程序

dart - Flutter 测试 MissingPluginException

flutter - 如何在不改变 AppBar 的情况下更改 TabBar 的背景颜色?

flutter - 找不到路线生成器