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