使 TabBarView 占用所有剩余空间

Posted

技术标签:

【中文标题】使 TabBarView 占用所有剩余空间【英文标题】:Make TabBarView take up all remaining space 【发布时间】:2019-09-23 11:48:21 【问题描述】:

Flutter 新手,不知道如何在我的 UI 上设置大小限制,因此不会溢出。尝试使用选项卡制作一些不同的 UI,其中我在选项卡栏上方有一些组件。基本上我想要这样的东西:

--------------------
|     Container    |
--------------------
|      TabBar      |
--------------------
|                  |
|                  |
|    TabBarView    |
|                  |
|                  |
--------------------
|     Container    |
--------------------

问题是,我不知道如何让 TabBarView 占用剩余空间。我的代码示例甚至无法运行,只是给了我这样的错误:

I/flutter (3875): ══╡ 渲染库发现异常╞════════════════════════════════════ ══════════════════════════ I/flutter (3875):在 performResize() 期间抛出了以下断言: I/flutter (3875):水平视口被赋予了无限的高度。 I/flutter(3875):视口在横轴上扩展以填充其容器并约束其子项以匹配 I/flutter (3875):它们在横轴上的范围。在这种情况下,水平视口被赋予了无限量的 I/flutter (3875):要扩展的垂直空间。

  Widget build(BuildContext context) 
    List<Tab> myTabs = <Tab>[
      Tab(text: 'TAB 1'),
      Tab(text: 'TAB 2'),
      Tab(text: 'TAB 3'),
    ];

    Widget topBar = Container(
        padding: EdgeInsets.all(10),
        child: Row(
          mainAxisAlignment: MainAxisAlignment.spaceAround,
          children: <Widget>[
            Text("TEXT 1"),
            Text("TEXT 2"),
            Text("TEXT 3"),
          ],
        ));

    Widget bottomBar = Row(
      children: <Widget>[
        RaisedButton(child: Text("Cancel")),
        RaisedButton(child: Text("OK")),
      ],
    );

    return DefaultTabController(
      length: 3,
      child: Scaffold(
        appBar: AppBar(
          title: Text("Test"),
        ),
        body: Column(
          children: <Widget>[
            topBar,
            TabBar(
              tabs: myTabs,
            ),
            TabBarView(
              children: myTabs.map((Tab tab) 
                return Container(
                  color: Colors.red,
                  child: Text(tab.text)
                );
              ).toList(),
            ),
          ],
        ),
        bottomNavigationBar: bottomBar,
      ),
    );
  

【问题讨论】:

【参考方案1】:

将 TabBarView 放入 Expanded 小部件

【讨论】:

以上是关于使 TabBarView 占用所有剩余空间的主要内容,如果未能解决你的问题,请参考以下文章

布局:一列根据需要宽,另一列占用剩余空间

设置 iframe 以占用页面中的剩余空间

非DFS使用空间

自动调整网格列以占用父级中的剩余空间

使弹性项目具有 100% 的高度和溢出:滚动 [重复]

Flutter - 当兄弟姐妹灵活时,扩展不会占用所有可用空间