Вертикальному окну просмотра была присвоена неограниченная ошибка высоты

 @override
 Widget build(BuildContext context) {
   return Column(
     children: <Widget>[
       new Text("Some text"),
       ListView()
     ],
   );
 }

 Widget ListView() {
   return ListView(
     padding: EdgeInsets.symmetric(vertical: 8.0),
     children: Item(),
   );
 }

 List<Item> Item() {
   return list
     .map((item) => Item(text: item))
     .toList();
 }

 class Item extends ListTile {
   Item({String text, GestureTapCallback onTap})
    : super(subtitle: Column(children: <Widget>[
        Text(text),
      ]));
 }

На экране появляется пустое место, и консоль сообщает:

Вертикальному окну просмотра была присвоена неограниченная высота. Видовые экраны расширяются в направлении прокрутки, заполняя свой контейнер.


person jaede    schedule 08.08.2018    source источник


Ответы (2)


Обертка ListView внутри Flexible заставит его работать.

Widget ListView() {
return new Flexible(child: new ListView(
    padding: new EdgeInsets.symmetric(vertical: 8.0),
    children: Item()));
}
person jaede    schedule 08.08.2018
comment
Я бы также добавил, что если вы используете виджет Padding, вы должны поместить его в виджет Flexible. - person Philippe Fanaro; 03.11.2019
comment
Это не работает, я получаю, что у детей RenderFlex есть ненулевой изгиб, но входящие ограничения по высоте неограничены. - person giorgio79; 24.05.2020
comment
меня устраивает. хотя я не понимаю, почему, если используется гибкий, ошибка исчезает. - person chitgoks; 10.06.2020

Лучшее решение - использовать гибкий, но если вы хотите указать точную высоту, вы должны использовать контейнер следующим образом:

    Widget ListView() {
    return Container(
       height:100.0,
       child: ListView(
        padding: new EdgeInsets.symmetric(vertical: 8.0),
        children: Item()));
    }
person dmarquina    schedule 11.02.2019