将标签标签添加到Flutter中的TabView

时间:2018-07-01 15:31:29

标签: android-studio dart flutter

我正在尝试扩展提议的TabView作为答案here

具体来说,我要使用类别标签代替灰色的点,并将与该类别相对应的小部件作为选项卡加载。

我尝试关注文档,但是如果我更改AppBar中的内容,只会给我一个渲染错误。

2 个答案:

答案 0 :(得分:0)

您可以通过DefaultTabController小部件实现所需的功能。您可以看到仅带有图标的示例here。这是带有标题的修改后的版本。 TabBar部分用于标签及其规范。 TabBarView用于内部视图。

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

如果使用上面的代码,将获得带有说明文字的3个标签式标签视图。

编辑:

//Call the widget as follows
new TabBarDemo(createTabsDynamically());

//method to use for dynamic creation.
List<Tab> createTabsDynamically() {

    List<String> titles = ["Car", "Transit", "Bike"];
    List<IconData> iconData = [Icons.directions_car, Icons.directions_transit, Icons.directions_bike];
    List<Tab> tabs = new List();
    // Assuming titles and icons have the same length
    for (int i = 0; i< titles.length; i++) {
      tabs.add(Tab(icon: Icon(iconData[i]), text: titles[i],));
    }

    return tabs;
}

class TabBarDemo extends StatelessWidget {

  List<Tab> tabs;
  TabBarDemo(this.tabs);

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

答案 1 :(得分:0)

您可以通过 TabController 小部件实现所需的功能。我找到了一个TabBar here的简单示例。