Flutter: минимальная высота в горизонтальном списке - программирование
Подтвердить что ты не робот

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

Ответ 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.