【发布时间】:2018-10-13 19:24:32
【问题描述】:
我正在尝试在 Flutter 中创建一个水平滚动的项目列表,并且我希望该列表仅根据其子项占据必要的高度。通过设计“ListView 试图扩展以适应其横向的可用空间”(来自Flutter docs),我还注意到它占据了视口的整个高度,但有没有办法让它不这样做?理想情况下与此类似(显然行不通):
new ListView(
scrollDirection: Axis.horizontal,
crossAxisSize: CrossAxisSize.min,
children: <Widget>[
new ListItem(),
new ListItem(),
// ...
],
);
我意识到做到这一点的一种方法是将ListView 包装在具有固定高度的Container 中。但是,我不一定知道物品的高度:
new Container(
height: 97.0,
child: new ListView(
scrollDirection: Axis.horizontal,
children: <Widget>[
new ListItem(),
new ListItem(),
// ...
],
),
);
我能够通过将Row 嵌套在SingleChildScrollView 和Column 和mainAxisSize: MainAxisSize.min 中来组合出一个“解决方案”。但是,对我来说,这并不是一个解决方案:
new Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
new SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: new Row(
children: <Widget>[
new ListItem(),
new ListItem(),
// ...
],
),
),
],
);
【问题讨论】:
-
同样的问题,你解决了吗?
-
这个问题还没有解决办法,没有。
-
谢谢,shrinkWrap 对我不起作用。但是您的代码可以: SingleChildScrollView(scrollDirection: Axis.horizontal, child: new Row( /* 将您的小部件放在这里*/),) 如果您找到了“更好”的解决方案,请告诉我们!
-
@sindrenm 我喜欢 Column/SingleChildScrollView/Row 组合,我决定从中简单地构建一个 StatelessWidget(我称之为 ScrollableRow)。我认为它可以完成工作,我真的不认为它有问题。我只是将其视为一种明确说明您想要什么的方式,并通过从中构建一个小部件,我可以以简洁明了的方式使用它。
-
那么,最后,我们不能让水平的
ListView有基于孩子身高的高度吗?SingleChildScrollView基于ListView是唯一的选择吗?我真的很想使用ListView,因为它在语义上更正确。