美文网首页
Flutter Horizontal viewport was

Flutter Horizontal viewport was

作者: StevenHu_Sir | 来源:发表于2019-12-12 09:37 被阅读0次

问题由来

写纵向或横向的布局的时候,一不小心就会遇到这个异常,宽度或高度溢出,导致widget不显示

比如一个简单的例子:

body: Column(
    children: <Widget>[
        Text('abc'),
      child: new ListView.builder(
          itemCount: articleDatas.length,
          itemBuilder: (BuildContext context, int position) {
            if (position.isOdd) return new Divider();
            return getRow(position);
          }),
    ],
  ),

Column中只有一个Text和ListView,但是效果确实ListView不显示,只显示Text。
随便报了一下Horizontal viewport was given unbounded height.异常。
原因就是flutter不知道ListView的高度而导致无法渲染

解决办法

方法1.固定高度

直接用Container包裹起来写死高度

body: Column(
        children: <Widget>[
        
          Text("abc"),
          
          Container(
                height: 200,
              child: new ListView.builder(
                  itemCount: articleDatas.length,
                  itemBuilder: (BuildContext context, int position) {
                    if (position.isOdd) return new Divider();
                    return getRow(position);
                  }),
              )
        ],
      ),

方法2.shrinkWrap: true

给ListView的shrinkWrap属性设置为true,及父视图的大小跟随子组件的内容大小

方法3.Flexible

Flexible是flutter中的一个弹性布局,相当于android中的LinearLayout。
Flexible中有一个flex属性,等于layout_weight,把剩余空间全部占掉。
所以,我们用Flexible把ListView包裹起来即可

Flexible(
    child: new ListView.builder(
        ...
        }),
  )

第三种一般才是最终的解决办法,第一种虽然也可以,但是局限性太多.

相关文章

网友评论

      本文标题:Flutter Horizontal viewport was

      本文链接:https://www.haomeiwen.com/subject/uwqigctx.html