web-dev-qa-db-ja.com

フラッター:水平リストビューの最小高さ

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(),
      // ...
    ],
  ),
);

RowSingleChildScrollViewColumnmainAxisSize: MainAxisSize.minでネストすることにより、「ソリューション」をハックすることができました。ただし、これは私には解決策のようには感じません。

new Column(
  mainAxisSize: MainAxisSize.min,
  children: <Widget>[
    new SingleChildScrollView(
      scrollDirection: Axis.horizontal,
      child: new Row(
        children: <Widget>[
          new ListItem(),
          new ListItem(),
          // ...
        ],
      ),
    ),
  ],
);
36
sindrenm

shrinkListViewプロパティをtrueに設定するだけで、拡大するのではなくスペースに収まります。

例:

ListView(
        shrinkWrap: true, //just set this property
        padding: const EdgeInsets.all(8.0),
        children: listItems.toList(),
      ),
9
Taha Ali

ConstrainedBoxを使用して、minHeightおよびmaxHeightを設定します

ConstrainedBox(
  constraints: new BoxConstraints(
    minHeight: 35.0,
    maxHeight: 160.0,
  ),

  child: new ListView(
    shrinkWrap: true,
    children: <Widget>[
      new ListItem(),
      new ListItem(),
    ],

  ),
)
5