# Assertion failed: 'verticalDirection' is null or not set

- **ID:** `flutter/assertion-failed-vertical-viewport`
- **Domain:** flutter
- **Category:** assertion_error
- **Verification:** ai_generated
- **Fix Rate:** 93%

## Root Cause

A vertical viewport (e.g., ListView, Column) is used without specifying a constrained height, causing infinite vertical space.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| Flutter 3.13 | active | — | — |
| Flutter 3.16 | active | — | — |
| Flutter 3.19 | active | — | — |

## Workarounds

1. **Wrap the ListView in a Container or SizedBox with a fixed height:
SizedBox(
  height: 300,
  child: ListView(
    children: [...],
  ),
)** (95% success)
   ```
   Wrap the ListView in a Container or SizedBox with a fixed height:
SizedBox(
  height: 300,
  child: ListView(
    children: [...],
  ),
)
   ```
2. **If inside a Column, wrap the ListView in an Expanded and ensure the Column has a bounded height (e.g., by wrapping the Column in a SizedBox or Expanded):
Column(
  children: [
    Expanded(
      child: ListView(children: [...]),
    ),
  ],
)** (90% success)
   ```
   If inside a Column, wrap the ListView in an Expanded and ensure the Column has a bounded height (e.g., by wrapping the Column in a SizedBox or Expanded):
Column(
  children: [
    Expanded(
      child: ListView(children: [...]),
    ),
  ],
)
   ```
3. **Use a CustomScrollView with slivers if you need mixed scrolling and non-scrolling content.** (85% success)
   ```
   Use a CustomScrollView with slivers if you need mixed scrolling and non-scrolling content.
   ```

## Dead Ends

- **Wrapping the ListView in an Expanded widget inside a Column** — Expanded only works when the parent has a fixed height; if the Column itself is unbounded, it still fails. (40% fail)
- **Setting shrinkWrap: true on the ListView without also constraining the parent** — ShrinkWrap only affects the viewport's own size calculation; the parent widget must still provide a finite height constraint. (30% fail)
- **Using Flexible instead of Expanded** — Flexible also requires a bounded parent; same fundamental issue. (50% fail)
