flutter - 在 flutter 中使用 TabBarView 获取 'Horizontal viewport was given unbounded height.'

标签 flutter flutter-layout

我正在尝试制作个人资料页面,其中用户信息位于顶部。然后在其下方有一个选项卡 View ,用于不同的 View 。

enter image description here

这是我目前正在使用的代码,当我将 TabBarView 取出时,它不会出现错误,如果我将 TabBarView 包装在Expanded 错误 RenderFlex 子项具有非零 flex 但传入的高度约束是无界的。 出现。

     @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(''),
      ),
      body: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          Padding(
            padding: EdgeInsets.all(10.0),
            child: Row(
              children: <Widget>[
                CircleAvatar(
                  minRadius: 45.0,
                  backgroundImage: NetworkImage(
                      'https://www.ienglishstatus.com/wp-content/uploads/2018/04/Anonymous-Whatsapp-profile-picture.jpg'),
                ),
                Padding(
                  padding: EdgeInsets.only(left: 10.0),
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: <Widget>[
                      Text(
                        'Testing Name',
                        style: TextStyle(
                          fontSize: 22.0,
                          color: Colors.grey.shade800,
                        ),
                      ),
                      Text(
                        '@testing_username',
                        style: TextStyle(
                          fontSize: 13.0,
                          color: Colors.grey.shade800,
                        ),
                      ),
                    ],
                  ),
                ),
              ],
            ),
          ),

          DefaultTabController(
            length: 3,
            child: Column(
              children: <Widget>[
                TabBar(
                  tabs: <Widget>[
                    Tab(
                      icon: Padding(
                        padding: EdgeInsets.all(6.0),
                        child: Image.asset(
                          "assets/images/icons/butterlike.png",
                          color: Colors.grey.shade800,
                        ),
                      ),
                    ),
                    Tab(
                      icon: Padding(
                        padding: EdgeInsets.all(6.0),
                        child: Image.asset(
                          "assets/images/icons/butterlike.png",
                          color: Colors.grey.shade800,
                        ),
                      ),
                    ),
                    Tab(
                      icon: Padding(
                        padding: EdgeInsets.all(6.0),
                        child: Image.asset(
                          "assets/images/icons/butterlike.png",
                          color: Colors.grey.shade800,
                        ),
                      ),
                    ),
                  ],
                ),

                TabBarView(
                  children: <Widget>[
                    Container(
                      color: Colors.grey,
                    ),
                    Container(
                      color: Colors.green,
                    ),
                    Container(
                      color: Colors.purple,
                    ),
                  ],
                ),
              ],
            ),
          )
        ],
      ),
    );
  }

我确实尝试了 this 的变体但无法让它工作。

最佳答案

错误描述很清楚,TabBarView 没有限制高度。父小部件也没有限制高度。所以,Expanded 小部件并不能解决这个问题。

编辑: 以下解决方案适用于上述问题(带有列)。在一般情况下,使用带有 shr​​inkWrap: true 的 ListView。(或任何其他小部件with shrinkWrap) 正如@Konstantin Kozirev 正确提到的那样,shrinkWrap 会导致一些性能问题。寻找更好的更新解决方案。

有一些选择:

第一种解决方案:

用有限高度的小部件(如 SizedBox 或 AspectRatio)包裹父小部件(列)。然后像这样使用 Expanded 小部件:

Expanded(
  child: TabBarView(...),
)

第二个解决方案:

在 TabBarView 本身上使用像 SizedBox 或 AspectRatio 这样的有界小部件:

SizedBox(
  height: 300.0,
  child: TabBarView(...),
)

注意如果高度不是静态的,您也可以动态计算高度。

关于flutter - 在 flutter 中使用 TabBarView 获取 'Horizontal viewport was given unbounded height.',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52023610/

相关文章:

flutter - 如何防止整数值变为负数

flutter - 如何在 flutter 中制作半圆形 slider

flutter - flutter 中的计量单位是什么

flutter - 如何检查用户是否向左或向右挥动(可忽略) flutter

firebase - Flutter/Firestore:类 'QuerySnapshot'没有实例getter 'document'

flutter - SliverAppBar 仅在滚动一段时间后向上推

flutter - 修复底部空间的小部件

flutter - 为什么在Dart中执行“方法级联”时出现此错误?

android - 在 flutter 中构建应用程序 2 次后构建失败

flutter - 制作 GridView ,元素之间没有间隙