Flutter 子对象具有非零弹性,但传入的高度约束是无限的 退货卡( 孩子:排( 儿童:[ 占位符( 后备高度:100, 后备宽度:100, ), 纵队( mainAxisSize:mainAxisSize.min, 儿童:[ 容器(高度:10,子对象:容器(子对象:文本(“一”),), 展开(子:容器(子:文本(“中心”)), ], ) ], ), );

Flutter 子对象具有非零弹性,但传入的高度约束是无限的 退货卡( 孩子:排( 儿童:[ 占位符( 后备高度:100, 后备宽度:100, ), 纵队( mainAxisSize:mainAxisSize.min, 儿童:[ 容器(高度:10,子对象:容器(子对象:文本(“一”),), 展开(子:容器(子:文本(“中心”)), ], ) ], ), );,flutter,Flutter,在上面的代码中,我遇到了错误: I/flatter(4872):在performLayout()期间抛出了以下断言: I/颤振(4872):RenderFlex子项具有非零的弯曲,但传入的高度约束是无限制的。 I/颤振(4872):当柱位于不提供有限高度约束的父项中时,例如,如果它是 I/flatter(4872):在垂直滚动中,它将尝试沿垂直轴收缩包裹其子对象。设定 I/flatter(4872):子对象上的flex(例如,使用Expanded)表示子对象将展开以填充剩余部分 I/颤振(487

在上面的代码中,我遇到了错误:

I/flatter(4872):在performLayout()期间抛出了以下断言: I/颤振(4872):RenderFlex子项具有非零的弯曲,但传入的高度约束是无限制的。 I/颤振(4872):当柱位于不提供有限高度约束的父项中时,例如,如果它是 I/flatter(4872):在垂直滚动中,它将尝试沿垂直轴收缩包裹其子对象。设定 I/flatter(4872):子对象上的flex(例如,使用Expanded)表示子对象将展开以填充剩余部分 I/颤振(4872):垂直方向上的空间

全部代码:

return Card(
  child: Row(
    children: <Widget>[
      Placeholder(
        fallbackHeight: 100,
        fallbackWidth: 100,
      ),
      Column(
        mainAxisSize: MainAxisSize.min,
        children: <Widget>[
          Container(height: 10,  child: Container(child: Text("One"),)),
          Expanded(child: Container(child:  Text("Center") )),

        ],
      )
    ],
  ),
);
类FilmItems扩展了无状态小部件{
列表电影列表;
列表_getFilmList(){
var items=List.generate(101,(计数器)=>“item$counter”);
退货项目;
}
电影项目(){
filmListList=_getFilmList();
}
@凌驾
小部件构建(构建上下文){
返回ListView.builder(
itemCount:filmListList.length,
itemBuilder:(构建上下文,int索引){
回程卡(
孩子:排(
儿童:[
占位符(
后备高度:100,
后备宽度:100,
),
纵队(
mainAxisSize:mainAxisSize.min,
儿童:[
容器(高度:10,子对象:容器(子对象:文本(“一”),),
展开(子:容器(子:文本(“中心”)),
],
)
],
),
);
});
}
}

怎么了?

当您使用Column小部件时,它的父级应该有一个有限的高度。因此,在您的代码中,父对象是一行,并且它的高度也不是有限的。您需要使用容器包装柱,并提供有限的高度

class FilmItems extends StatelessWidget {
  List<String> filmListList;

  List<String> _getFilmList() {
    var items = List<String>.generate(101, (counter) => "item $counter");
    return items;
  }

  FilmItems() {
    filmListList = _getFilmList();
  }

  @override
  Widget build(BuildContext context) {
    return ListView.builder(
        itemCount: filmListList.length,
        itemBuilder: (BuildContext context, int index) {
          return Card(
            child: Row(
              children: <Widget>[
                Placeholder(
                  fallbackHeight: 100,
                  fallbackWidth: 100,
                ),
                Column(
                  mainAxisSize: MainAxisSize.min,
                  children: <Widget>[
                    Container(height: 10,  child: Container(child: Text("One"),)),
                    Expanded(child: Container(child:  Text("Center") )),

                  ],
                )
              ],
            ),
          );
        });
  }
}

问题是您使用的是
Expanded
,并且它的任何父项都有明确的高度

解决方案取决于您希望如何处理展开的
的高度。在您的情况下,似乎希望有一个
,其固定高度等于
占位符
。在这种情况下,您需要将
包装为与
占位符
相同的高度,如下所示:

Container(
     height: 500,
     child: Column()
)
@覆盖
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(标题:文本(“”),
正文:ListView.builder(
物品计数:3,
itemBuilder:(构建上下文,int索引){
回程卡(
孩子:大小盒子(
身高:100,
孩子:排(
儿童:[
占位符(
后备高度:100,
后备宽度:100,
),
纵队(
mainAxisSize:mainAxisSize.min,
儿童:[
正文(“一”),
展开(子对象:中心(子对象:文本(“中心”)),
],
),
],
),
),
);
}),
);
}
我删除了
文本(“一”)
的高度
10
,因为如果
fontSize
更大,文本看起来会被裁剪。我用
Center
小部件包装了
Text(“Center”)
,我想这就是您想要实现的


建议:如果
中的内容可能比
的高度更高,则内容看起来会被裁剪。如果可能发生这种情况,您可能需要采取另一种方法。

此代码似乎工作正常,您将在哪里返回此代码?你可以发布有这张卡片的父部件吗?@Pablo我添加了更多的代码,所以行没有明确的高度?没有。。除非孩子们身高有限。在您的示例中,您使用了扩展的内部Column。因此,柱将尝试扩展到其最大可能高度。但由于列的父级也没有有限的高度,它将抛出一个错误。
@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(title: Text("")),
    body: ListView.builder(
        itemCount: 3,
        itemBuilder: (BuildContext context, int index) {
          return Card(
            child: SizedBox(
              height: 100,
              child: Row(
                children: <Widget>[
                  Placeholder(
                    fallbackHeight: 100,
                    fallbackWidth: 100,
                  ),
                  Column(
                    mainAxisSize: MainAxisSize.min,
                    children: <Widget>[
                      Text("One"),
                      Expanded(child: Center(child: Text("Center"))),
                    ],
                  ),
                ],
              ),
            ),
          );
        }),
  );
}