Flutter. "Vertical viewport was given unbounded height" error

Ошибка "Vertical viewport was given unbounded height" обычно возникает, когда у вас есть виджет, поддерживающий прокрутку (например, ListView, Column или SingleChildScrollView), внутри родительского виджета, который не предоставляет ограниченную высоту. Вот несколько распространенных причин и решений:

Основные причины:

Эта ошибка часто возникает, когда вы пытаетесь использовать прокручиваемый виджет внутри другого виджета, который не имеет фиксированной или ограниченной высоты, например, Column или Row. Поскольку такие виджеты, как ListView или SingleChildScrollView, должны знать доступную им высоту, их размещение внутри виджетов без ограниченной высоты вызывает эту ошибку.

Решения:

  1. Обертка прокручиваемых виджетов с помощью Expanded или Flexible: Если вы используете ListView, GridView или SingleChildScrollView внутри Column, оберните его в Expanded или Flexible, чтобы задать ограниченную высоту. Например:

    Column(
      children: [
        Expanded(
          child: ListView(
            children: [/* Ваши элементы здесь */],
          ),
        ),
      ],
    )
    
  2. Задание ограничений по высоте с помощью Container, SizedBox или ConstrainedBox: Если вы не хотите, чтобы прокручиваемый виджет занимал всё доступное пространство, можно обернуть его в виджет с фиксированной высотой, такой как Container, SizedBox или ConstrainedBox:
    SizedBox(
      height: 300,  // задание конкретной высоты
      child: ListView(
        children: [/* Ваши элементы здесь */],
      ),
    )
    
  3. Использование ShrinkWrap для небольших списков: Если список относительно небольшой и не требует использования всего доступного пространства, вы можете использовать свойство shrinkWrap:
    ListView(
      shrinkWrap: true,
      children: [/* Ваши элементы здесь */],
    )
    

    Однако стоит учитывать, что использование shrinkWrap может повлиять на производительность при работе с большими списками.

  4. Во вложенных прокручиваемых виджетах (SingleChildScrollView внутри Column): Если вы вкладываете прокручиваемые виджеты, такие как SingleChildScrollView или ListView, в родительский виджет без ограничения высоты, оберните прокручиваемый виджет в контейнер с ограничением по высоте (например, с помощью Expanded или SizedBox).

    Column(
      children: [
        Text("Заголовок"),
        Expanded(
          child: ListView(
            children: [/* Ваши элементы */],
          ),
        ),
      ],
    )
    

    Предоставляя ограниченную высоту с помощью Expanded, прокручиваемый виджет получает ограничение в рамках доступного пространства, что решает ошибку.