Flutter: минимальная высота в горизонтальном списке
Я пытаюсь создать горизонтальный список элементов прокрутки во Flutter, и я хочу, чтобы этот список занимал только необходимую высоту, основываясь на его дочерних элементах. По замыслу " ListView
пытается расширяться, чтобы соответствовать пространству, доступному в его поперечном направлении" (из документов Flutter), что я также замечаю в том, что он занимает всю высоту области просмотра, но есть ли способ сделать это не сделай это? В идеале что-то похожее на это (что, очевидно, не работает):
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(),
// ...
],
),
);
Мне удалось взломать "решение", SingleChildScrollView
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(),
// ...
],
),
),
],
);
Ответы
Ответ 1
Просто установите свойство shrink
ListView
true
и оно будет соответствовать пространству, а не расширению.
Пример:
ListView(
shrinkWrap: true, //just set this property
padding: const EdgeInsets.all(8.0),
children: listItems.toList(),
),
Ответ 2
Используйте ConstrainedBox
для установки minHeight
и maxHeight
ConstrainedBox(
constraints: new BoxConstraints(
minHeight: 35.0,
maxHeight: 160.0,
),
child: new ListView(
shrinkWrap: true,
children: <Widget>[
new ListItem(),
new ListItem(),
],
),
)
Ответ 3
Muito obrigado #StephenRauch sua solução foi util para mim.