All skills
flutter avatar

/flutter-fix-layout-issues

@353d814 official
by flutterflutter/skills3k stars
182

Fixes Flutter layout errors (overflows, unbounded constraints) using Dart and Flutter MCP tools. Use when addressing "RenderFlex overflowed", "Vertical viewport was given unbounded height", or similar layout issues.

Use this Skill: https://skilld.dev/gh/flutter/skills/flutter-fix-layout-issues

This session only. Nothing lands on disk.

SKILL.md

≈61 tokens always: the name and description. ≈1.2k when used: this file.

Resolving Flutter Layout Errors

Contents

Constraint Violation Diagnostics

Flutter layout operates on a strict rule: Constraints go down. Sizes go up. Parent sets position. Layout errors occur when this negotiation fails, typically due to unbounded constraints or unconstrained children.

Diagnose layout failures using the following error signatures:

  • "Vertical viewport was given unbounded height": Triggered when a scrollable widget (ListView, GridView) is placed inside an unconstrained vertical parent (Column). The parent provides infinite height, and the child attempts to expand infinitely.
  • "An InputDecorator...cannot have an unbounded width": Triggered when a TextField or TextFormField is placed inside an unconstrained horizontal parent (Row). The text field attempts to determine its width based on infinite available space.
  • "RenderFlex overflowed": Triggered when a child of a Row or Column requests a size larger than the parent's allocated constraints. Visually indicated by yellow and black warning stripes.
  • "Incorrect use of ParentData widget": Triggered when a ParentDataWidget is not a direct descendant of its required ancestor. (e.g., Expanded outside a Flex, Positioned outside a Stack).
  • "RenderBox was not laid out": A cascading side-effect error. Ignore this and look further up the stack trace for the primary constraint violation (usually an unbounded height/width error).

Layout Error Resolution Workflow

Copy and use this checklist to systematically resolve layout constraint violations.

Task Progress

  • Run the application in debug mode to capture the exact layout exception in the console.
  • Identify the primary error message (ignore cascading "RenderBox was not laid out" errors).
  • Apply the conditional fix based on the specific error type:
    • If "Vertical viewport was given unbounded height": Wrap the scrollable child (ListView, GridView) in an Expanded widget to consume remaining space, or wrap it in a SizedBox to provide an absolute height constraint.
    • If "An InputDecorator...cannot have an unbounded width": Wrap the TextField or TextFormField in an Expanded or Flexible widget.
    • If "RenderFlex overflowed": Constrain the overflowing child by wrapping it in an Expanded widget (to force it to fit) or a Flexible widget (to allow it to be smaller than the allocated space).
    • If "Incorrect use of ParentData widget": Move the ParentDataWidget to be a direct child of its required parent. Ensure Expanded/Flexible are direct children of Row/Column/Flex. Ensure Positioned is a direct child of Stack.
  • Execute Flutter hot reload.
  • Run validator -> review errors -> fix: Inspect the UI to verify the red/grey error screen or yellow/black overflow stripes are resolved. If new layout errors appear, repeat the workflow.

Examples

Fixing Unbounded Height (ListView in Column)

Input (Error State):

// Throws "Vertical viewport was given unbounded height"
Column(
  children: <Widget>[
    const Text('Header'),
    ListView(
      children: const <Widget>[
        ListTile(title: Text('Item 1')),
        ListTile(title: Text('Item 2')),
      ],
    ),
  ],
)

Output (Resolved State):

// Wrap ListView in Expanded to constrain its height to the remaining Column space
Column(
  children: <Widget>[
    const Text('Header'),
    Expanded(
      child: ListView(
        children: const <Widget>[
          ListTile(title: Text('Item 1')),
          ListTile(title: Text('Item 2')),
        ],
      ),
    ),
  ],
)

Fixing Unbounded Width (TextField in Row)

Input (Error State):

// Throws "An InputDecorator...cannot have an unbounded width"
Row(
  children: [
    const Icon(Icons.search),
    TextField(), 
  ],
)

Output (Resolved State):

// Wrap TextField in Expanded to constrain its width to the remaining Row space
Row(
  children: [
    const Icon(Icons.search),
    Expanded(
      child: TextField(),
    ),
  ],
)

Fixing RenderFlex Overflow

Input (Error State):

// Throws "A RenderFlex overflowed by X pixels on the right"
Row(
  children: [
    const Icon(Icons.info),
    const Text('This is a very long text string that will definitely overflow the available screen width and cause a RenderFlex error.'),
  ],
)

Output (Resolved State):

// Wrap the Text widget in Expanded to force it to wrap within the available constraints
Row(
  children: [
    const Icon(Icons.info),
    Expanded(
      child: const Text('This is a very long text string that will definitely overflow the available screen width and cause a RenderFlex error.'),
    ),
  ],
)

Source: SKILL.md on GitHub

No alerts2mo3 checks · Risk SAFE
  • Gen Agent Trust Hub2mo

    The skill is a purely instructional guide for Flutter developers to resolve common layout constraint errors. It contains no executable code or external connections.

  • Socket2mo

    No alerts

  • Snyk2mo

    Risk: LOW · No issues

Signed by skilld at 353d814. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub yesterday.

Activeupdated 5 months ago
Other metadata
metadata
{
  "model": "models/gemini-3.1-pro-preview",
  "last_modified": "Tue, 21 Apr 2026 19:45:59 GMT"
}
  • Debugging
  • flutter
  • dart
  • layout
  • constraints
  • overflow
  • responsive-ui
  • rendering

README badge

README badge for flutter/skills/flutter-fix-layout-issues

Fixes Flutter layout errors like "RenderFlex overflowed" and "Vertical viewport was given unbounded height" by applying constraint-based solutions using Dart. The skill diagnoses violation types and applies targeted wraps (Expanded, Flexible, SizedBox) to resolve unbounded constraints and overflow issues.

Generated from the current SKILL.md.

What layout errors does this skill handle?
This skill addresses common Flutter constraint violations: unbounded height/width errors (ListView in Column, TextField in Row), RenderFlex overflows, and incorrect ParentData widget placement (Expanded/Flexible/Positioned in wrong parents).
How does this skill fix layout issues?
It wraps problematic widgets in Expanded, Flexible, or SizedBox to provide missing constraints. For example, wrapping ListView in Expanded when it's placed in a Column that provides unbounded height.
Does this work with all Flutter widgets?
The skill focuses on layout constraint violations in scrollables (ListView, GridView), text inputs (TextField), and flex containers (Row, Column, Stack). It targets the most common layout error patterns in Flutter.
What if I see 'RenderBox was not laid out' errors?
These are cascading side-effect errors. The skill's workflow directs you to ignore them and look further up the stack trace for the primary constraint violation, which is usually an unbounded height or width error.

Generated from the current SKILL.md. These answers refresh after source changes.