Flutter. "Vertical viewport was given unbounded height" error

Ошибка "Vertical viewport was given unbounded height" обычно возникает, когда у вас есть виджет, поддерживающий прокрутку (например, ListView
, Column
или SingleChildScrollView
), внутри родительского виджета, который не предоставляет ограниченную высоту. Вот несколько распространенных причин и решений:
Основные причины:
Эта ошибка часто возникает, когда вы пытаетесь использовать прокручиваемый виджет внутри другого виджета, который не имеет фиксированной или ограниченной высоты, например, Column
или Row
. Поскольку такие виджеты, как ListView
или SingleChildScrollView
, должны знать доступную им высоту, их размещение внутри виджетов без ограниченной высоты вызывает эту ошибку.
Решения:
-
Обертка прокручиваемых виджетов с помощью
Expanded
илиFlexible
: Если вы используетеListView
,GridView
илиSingleChildScrollView
внутриColumn
, оберните его вExpanded
илиFlexible
, чтобы задать ограниченную высоту. Например:Column( children: [ Expanded( child: ListView( children: [/* Ваши элементы здесь */], ), ), ], )
- Задание ограничений по высоте с помощью
Container
,SizedBox
илиConstrainedBox
: Если вы не хотите, чтобы прокручиваемый виджет занимал всё доступное пространство, можно обернуть его в виджет с фиксированной высотой, такой какContainer
,SizedBox
илиConstrainedBox
:SizedBox( height: 300, // задание конкретной высоты child: ListView( children: [/* Ваши элементы здесь */], ), )
- Использование
ShrinkWrap
для небольших списков: Если список относительно небольшой и не требует использования всего доступного пространства, вы можете использовать свойствоshrinkWrap
:ListView( shrinkWrap: true, children: [/* Ваши элементы здесь */], )
Однако стоит учитывать, что использование
shrinkWrap
может повлиять на производительность при работе с большими списками. -
Во вложенных прокручиваемых виджетах (
SingleChildScrollView
внутриColumn
): Если вы вкладываете прокручиваемые виджеты, такие какSingleChildScrollView
илиListView
, в родительский виджет без ограничения высоты, оберните прокручиваемый виджет в контейнер с ограничением по высоте (например, с помощьюExpanded
илиSizedBox
).Column( children: [ Text("Заголовок"), Expanded( child: ListView( children: [/* Ваши элементы */], ), ), ], )
Предоставляя ограниченную высоту с помощью
Expanded
, прокручиваемый виджет получает ограничение в рамках доступного пространства, что решает ошибку.