我能找到的最相似的问题是'how to create a row of scrollable text boxes or widgets in flutter inside a ListView?',但是他们的解决方案只是为ListView的容器分配高度:
import 'package:flutter/material.dart';
// Define a 'main' function to run when our app starts
void main() {
var app = new MaterialApp(
home: new SafeArea(
left: false,
top: true,
right: false,
bottom: false,
child: new Scaffold(
body: new Container(
color: Colors.green,
height: 50.0,
child: new ListView(
scrollDirection: Axis.horizontal,
children: <Widget>[
new Icon(Icons.check_circle, size: 50.0),
new Icon(Icons.add, size: 50.0),
new Icon(Icons.add, size: 50.0),
new Icon(Icons.add, size: 50.0),
new Icon(Icons.add, size: 50.0),
new Icon(Icons.add, size: 50.0),
new Icon(Icons.add, size: 50.0),
new Icon(Icons.add, size: 50.0),
new Icon(Icons.add, size: 50.0),
new Icon(Icons.add, size: 50.0),
new Icon(Icons.add, size: 50.0),
new Icon(Icons.add, size: 50.0),
new Icon(Icons.close, size: 50.0),
],
),
),
appBar: AppBar(
title: new Text("Hello")
),
),
),
);
runApp(app);
}
根据Julien Louage,除非添加子项,否则容器将扩展以填充其父项,在这种情况下,它将收缩以适应子项的尺寸。如果要删除Container的height属性,它将返回到填充其父级,就像它没有子级一样。
合理的结论是ListView引起了问题; ListView希望尽可能地大,并且没有明显的方法来更改它。
Row之类的其他小部件具有缩小方法以包含子代的方法,但ListView没有吗?要查看此示例以及Container的大小约定,请删除一些Icon以避免像素溢出,并进行以下更改:
//height: 50.0,
child: new Row(
crossAxisAlignment: CrossAxisAlignment.center,
//child: new ListView(
// scrollDirection: Axis.horizontal,
那么如何在不设置Container高度的情况下使ListView缩小以包含子项(例如Row可以使用CrossAxisAlignment.center)?应该有办法!