Flutterでアイテムの水平スクロールリストを作成しようとしていますが、そのリストはその子に基づいて必要な高さだけを取得するようにします。設計により、「ListView
は、その横方向に利用可能なスペースに収まるように拡張しようとします」( Flutter docs から)。これは、ビューポートですが、これを行わないようにする方法はありますか?理想的にはこれに似たもの(これは明らかに機能しません):
new ListView(
scrollDirection: Axis.horizontal,
crossAxisSize: CrossAxisSize.min,
children: <Widget>[
new ListItem(),
new ListItem(),
// ...
],
);
これを行う1つの方法は、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(),
// ...
],
),
),
],
);
shrink
のListView
プロパティをtrue
に設定するだけで、拡大するのではなくスペースに収まります。
例:
ListView(
shrinkWrap: true, //just set this property
padding: const EdgeInsets.all(8.0),
children: listItems.toList(),
),
ConstrainedBox
を使用して、minHeight
およびmaxHeight
を設定します
ConstrainedBox(
constraints: new BoxConstraints(
minHeight: 35.0,
maxHeight: 160.0,
),
child: new ListView(
shrinkWrap: true,
children: <Widget>[
new ListItem(),
new ListItem(),
],
),
)