Выбор ответа Junior Вёрстка и constraints спрашивают часто обновлено

Flutter: ListView внутри Column

Вопрос

Почему ListView прямо внутри Column падает с ошибкой «Vertical viewport was given unbounded height» и как это правильно исправить в большинстве случаев?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Column не ограничивает высоту детей, а список хочет всю; нужен Expanded вокруг ListView. Неограниченная высота от Column и желание ListView занять всё доступное несовместимы.

Варианты ответа

  1. В Column вообще нельзя класть прокручиваемые виджеты, поэтому заменить её на Stack
  2. Column не ограничивает высоту детей, а список хочет всю; нужен Expanded вокруг ListViewправильный ответ
  3. Всегда добавлять shrinkWrap: true: это бесплатно и снимает ошибку в любом случае
  4. Обернуть Column в SingleChildScrollView, тогда список получит конечную высоту

Разбор

Неограниченная высота от Column и желание ListView занять всё доступное несовместимы. Expanded даёт списку конкретный остаток высоты. shrinkWrap: true тоже убирает ошибку, но строит все элементы сразу, на длинных списках это дорого. SingleChildScrollView вокруг Column ошибку не исправит: внутри по-прежнему неограниченная высота.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме