Claude Cursor Skill

flutter-errors

Use when hitting layout errors (RenderFlex overflow, unbounded constraints, RenderBox not laid out), scroll errors, or setState-during-build errors.

LLM Mart · 0 points · 15 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download evanca-flutter-ai-rules-skills_flutter-errors-7d226d8.zip · 1 KB
Part of evanca/flutter-ai-rules — 37 skills

Install

skills CLI npx skills add https://github.com/evanca/flutter-ai-rules/tree/main/skills/flutter-errors
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install evanca-flutter-ai-rules@llmmart
Git git clone https://github.com/evanca/flutter-ai-rules.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole evanca/flutter-ai-rules collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

Flutter Errors Skill

This skill provides solutions for the most common Flutter runtime and layout errors.


RenderFlex Overflowed

Error: A RenderFlex overflowed by X pixels on the right/bottom.

Cause: A Row or Column contains children that are wider/taller than the available space.

Fix: Wrap the overflowing child in Flexible or Expanded, or constrain its size:

Row(
  children: [
    Expanded(child: Text('Long text that might overflow')),
    Icon(Icons.info),
  ],
)

Vertical Viewport Given Unbounded Height

Error: Vertical viewport was given unbounded height.

Cause: A ListView (or other scrollable) is placed inside a Column without a bounded height.

Fix: Wrap the ListView in Expanded or give it a fixed height with SizedBox:

Column(
  children: [
    Text('Header'),
    Expanded(
      child: ListView(children: [...]),
    ),
  ],
)

InputDecorator Cannot Have Unbounded Width

Error: An InputDecorator...cannot have an unbounded width.

Cause: A TextField or similar widget is placed in a context without width constraints.

Fix: Wrap it in Expanded, SizedBox, or any parent that provides width constraints:

Row(
  children: [
    Expanded(child: TextField()),
  ],
)

setState Called During Build

Error: setState() or markNeedsBuild() called during build.

Cause: setState or showDialog is called directly inside the build method.

Fix: Trigger state changes in response to user actions, or defer to after the frame using addPostFrameCallback:

@override
void initState() {
  super.initState();
  WidgetsBinding.instance.addPostFrameCallback((_) {
    // Safe to call setState or showDialog here
  });
}

ScrollController Attached to Multiple Scroll Views

Error: The ScrollController is attached to multiple scroll views.

Cause: A single ScrollController instance is shared across more than one scrollable widget simultaneously.

Fix: Ensure each scrollable widget has its own dedicated ScrollController instance.


RenderBox Was Not Laid Out

Error: RenderBox was not laid out: ...

Cause: A widget is missing or has unbounded constraints — commonly ListView or Column without proper size constraints.

Fix: Review your widget tree for missing constraints. Common patterns:

  • Wrap ListView in Expanded inside a Column.
  • Give widgets an explicit width or height via SizedBox or ConstrainedBox.

Debugging Layout Issues

  • Use the Flutter Inspector (in DevTools) to visualize widget constraints.
  • Enable "Show guidelines" to see layout boundaries.
  • Add debugPaintSizeEnabled = true; temporarily in your main() to paint layout bounds.
  • Refer to the Flutter constraints documentation for a deeper understanding of how constraints propagate.

References

Files (flutter-ai-rules)
  • SKILL.md 3.2 KB
    ---
    name: flutter-errors
    description: "Use when hitting layout errors (RenderFlex overflow, unbounded constraints, RenderBox not laid out), scroll errors, or setState-during-build errors."
    license: MIT
    ---
    
    # Flutter Errors Skill
    
    This skill provides solutions for the most common Flutter runtime and layout errors.
    
    ---
    
    ## RenderFlex Overflowed
    
    **Error:** `A RenderFlex overflowed by X pixels on the right/bottom.`
    
    **Cause:** A `Row` or `Column` contains children that are wider/taller than the available space.
    
    **Fix:** Wrap the overflowing child in `Flexible` or `Expanded`, or constrain its size:
    
    ```dart
    Row(
      children: [
        Expanded(child: Text('Long text that might overflow')),
        Icon(Icons.info),
      ],
    )
    ```
    
    ---
    
    ## Vertical Viewport Given Unbounded Height
    
    **Error:** `Vertical viewport was given unbounded height.`
    
    **Cause:** A `ListView` (or other scrollable) is placed inside a `Column` without a bounded height.
    
    **Fix:** Wrap the `ListView` in `Expanded` or give it a fixed height with `SizedBox`:
    
    ```dart
    Column(
      children: [
        Text('Header'),
        Expanded(
          child: ListView(children: [...]),
        ),
      ],
    )
    ```
    
    ---
    
    ## InputDecorator Cannot Have Unbounded Width
    
    **Error:** `An InputDecorator...cannot have an unbounded width.`
    
    **Cause:** A `TextField` or similar widget is placed in a context without width constraints.
    
    **Fix:** Wrap it in `Expanded`, `SizedBox`, or any parent that provides width constraints:
    
    ```dart
    Row(
      children: [
        Expanded(child: TextField()),
      ],
    )
    ```
    
    ---
    
    ## setState Called During Build
    
    **Error:** `setState() or markNeedsBuild() called during build.`
    
    **Cause:** `setState` or `showDialog` is called directly inside the `build` method.
    
    **Fix:** Trigger state changes in response to user actions, or defer to after the frame using `addPostFrameCallback`:
    
    ```dart
    @override
    void initState() {
      super.initState();
      WidgetsBinding.instance.addPostFrameCallback((_) {
        // Safe to call setState or showDialog here
      });
    }
    ```
    
    ---
    
    ## ScrollController Attached to Multiple Scroll Views
    
    **Error:** `The ScrollController is attached to multiple scroll views.`
    
    **Cause:** A single `ScrollController` instance is shared across more than one scrollable widget simultaneously.
    
    **Fix:** Ensure each scrollable widget has its own dedicated `ScrollController` instance.
    
    ---
    
    ## RenderBox Was Not Laid Out
    
    **Error:** `RenderBox was not laid out: ...`
    
    **Cause:** A widget is missing or has unbounded constraints — commonly `ListView` or `Column` without proper size constraints.
    
    **Fix:** Review your widget tree for missing constraints. Common patterns:
    
    - Wrap `ListView` in `Expanded` inside a `Column`.
    - Give widgets an explicit `width` or `height` via `SizedBox` or `ConstrainedBox`.
    
    ---
    
    ## Debugging Layout Issues
    
    - Use the **Flutter Inspector** (in DevTools) to visualize widget constraints.
    - Enable **"Show guidelines"** to see layout boundaries.
    - Add `debugPaintSizeEnabled = true;` temporarily in your `main()` to paint layout bounds.
    - Refer to the [Flutter constraints documentation](https://docs.flutter.dev/ui/layout/constraints) for a deeper understanding of how constraints propagate.
    
    ## References
    
    - [Flutter Website GitHub Repository](https://github.com/flutter/website)
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related