竖直视窗给定了无限高度错误

24
 @override
 Widget build(BuildContext context) {
   return Column(
     children: <Widget>[
       new Text("Some text"),
       ListView()
     ],
   );
 }

 Widget ListView() {
   return ListView(
     padding: EdgeInsets.symmetric(vertical: 8.0),
     children: Item(),
   );
 }

 List<Item> Item() {
   return list
     .map((item) => Item(text: item))
     .toList();
 }

 class Item extends ListTile {
   Item({String text, GestureTapCallback onTap})
    : super(subtitle: Column(children: <Widget>[
        Text(text),
      ]));
 }

屏幕上出现了一个空白区域,控制台显示:
垂直视口高度未定义。视口沿滚动方向扩展以填充其容器。
2个回答

41
将ListView包裹在Flexible组件内可以使其正常工作。
Widget ListView() {
return new Flexible(child: new ListView(
    padding: new EdgeInsets.symmetric(vertical: 8.0),
    children: Item()));
}

我还想补充一点,如果你正在使用 Padding 小部件,应该将其放在 Flexible 小部件内。 - Philippe Fanaro
它不起作用,我得到了“RenderFlex子项具有非零flex,但传入的高度约束未被限制”的错误。 - giorgio79
它对我有效。虽然我不明白为什么使用Flexible,错误就会消失。 - chitgoks

6
最好的解决方案是使用Flexible,但如果您想给它一个精确的高度,您应该像这样使用Container:
    Widget ListView() {
    return Container(
       height:100.0,
       child: ListView(
        padding: new EdgeInsets.symmetric(vertical: 8.0),
        children: Item()));
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接