ListView внутри столбца вызывает `` Вертикальному окну просмотра была присвоена неограниченная высота ''

Я новичок в флаттере и проблемах с макетами.

Я хочу что-то вроде этого:  липкий заголовок и вид прокрутки внизу

Липкий заголовок и прокрутка под ним. Я подумал об использовании виджета Column с двумя дочерними элементами: первый - это заголовок, а второй - ListView.

Вот мой код

 Widget build(BuildContext context) {
 return Material(
   elevation: 8.0,
   child: Column(
     crossAxisAlignment: CrossAxisAlignment.start,
     children: <Widget>[
       Padding(
         padding: const EdgeInsets.all(16.0),
         child: Text(
           title,
           style:
               Theme.of(context).textTheme.subhead.copyWith(fontSize: 18.0),
           textAlign: TextAlign.left,
         ),
       ),
       Divider(height: 4.0),
       ListView.builder(itemBuilder: (context, i) {
         return ListTile(
           title: Text("Title $i"),
           subtitle: Text("Subtitle $i"),
         );
       }),
     ],
   ),
 );
}

Я получаю следующую ошибку.

I/flutter ( 5725): ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
I/flutter ( 5725): The following assertion was thrown during performResize():
I/flutter ( 5725): Vertical viewport was given unbounded height.
I/flutter ( 5725): Viewports expand in the scrolling direction to fill their container.In this case, a vertical
I/flutter ( 5725): viewport was given an unlimited amount of vertical space in which to expand. This situation
I/flutter ( 5725): typically happens when a scrollable widget is nested inside another scrollable widget.
I/flutter ( 5725): If this widget is always nested in a scrollable widget there is no need to use a viewport because
I/flutter ( 5725): there will always be enough vertical space for the children. In this case, consider using a Column
I/flutter ( 5725): instead. Otherwise, consider using the "shrinkWrap" property (or a ShrinkWrappingViewport) to size
I/flutter ( 5725): the height of the viewport to the sum of the heights of its children.

Я добавил made shrinkWrap для ListView true, как указано в сообщении, но это тоже не сработало.

Родителем этого макета является стек, содержащий различные такие страницы макета, причем все страницы этого макета находятся вне сцены, если только один пользователь выбрал их.

Что я делаю неправильно?


person Harsh Bhikadia    schedule 04.08.2018    source источник
comment
См. Также medium.com/cwi-software/.   -  person User    schedule 25.08.2018
comment
Думаю, название этого вопроса можно улучшить. Возможно, что-то вроде ListView внутри столбца вызывает `` Вертикальному окну просмотра была присвоена неограниченная высота '' или Вертикальному окну просмотра была присвоена ошибка неограниченной высоты с помощью ListView   -  person User    schedule 25.08.2018


Ответы (1)


Попробуйте обернуть свой ListView.builder виджетом Flexible или Expanded:

Flexible(
            child: ListView.builder(
              itemBuilder: (context, i) {
                return ListTile(
                  title: Text("Title $i"),
                  subtitle: Text("Subtitle $i"),
                );
              },
            ),
          ),
person Shady Aziza    schedule 04.08.2018
comment
Это сработало для меня, спасибо. Я не знаю, почему Flexible не упоминается в документации по flutter Как создавать макеты. Я пробовал ConstrainedBox, FittedBox, Expand и т.д. все ... В любом случае спасибо за помощь. - person Harsh Bhikadia; 05.08.2018
comment
это связано с тем, что ваш список имеет неограниченное количество дочерних элементов, нужно сказать, как вписаться в этот неограниченный размер, который ему был предоставлен - person Shady Aziza; 05.08.2018
comment
Это не работает, теперь я получаю, что у детей RenderFlex ненулевой изгиб, но входящие ограничения по высоте неограничены. - person giorgio79; 24.05.2020