flutter-fix-layout-issues
โดย flutter
แก้ไขข้อผิดพลาดการจัดวาง Flutter (โอเวอร์โฟลว์, ข้อจำกัดที่ไม่มีขอบเขต) โดยใช้เครื่องมือ Dart และ Flutter MCP ใช้เมื่อจัดการกับ "RenderFlex overflowed", "Vertical…
npx skills add https://github.com/flutter/skills --skill flutter-fix-layout-issuesResolving 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
TextFieldorTextFormFieldis 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
RoworColumnrequests 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
ParentDataWidgetis not a direct descendant of its required ancestor. (e.g.,Expandedoutside aFlex,Positionedoutside aStack). - "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 anExpandedwidget to consume remaining space, or wrap it in aSizedBoxto provide an absolute height constraint. - If "An InputDecorator...cannot have an unbounded width": Wrap the
TextFieldorTextFormFieldin anExpandedorFlexiblewidget. - If "RenderFlex overflowed": Constrain the overflowing child by wrapping it in an
Expandedwidget (to force it to fit) or aFlexiblewidget (to allow it to be smaller than the allocated space). - If "Incorrect use of ParentData widget": Move the
ParentDataWidgetto be a direct child of its required parent. EnsureExpanded/Flexibleare direct children ofRow/Column/Flex. EnsurePositionedis a direct child ofStack.
- If "Vertical viewport was given unbounded height": Wrap the scrollable child (
- 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.'),
),
],
)
Skills เพิ่มเติมจาก flutter
dart-modern-features
flutter
เพื่อหาผู้สมัครสำหรับการปรับปรุงให้ทันสมัย:
official
dart-log-failure-parser
flutter
แยกวิเคราะห์ข้อผิดพลาดจากบันทึกการทดสอบ Dart และ Flutter
official
find-release
flutter
ทักษะในการค้นหารุ่น Dart และ Flutter ที่ต่ำที่สุดซึ่งมี commit ที่กำหนด ใช้ทักษะนี้เมื่อผู้ใช้ถามว่า commit ใดถูกเพิ่มใน Flutter หรือ Dart…
official
flutter-pr-checks-finder
flutter
ค้นหา checks ที่ล้มเหลวใน Flutter PR และระบุตำแหน่ง URL ของ LUCI log ที่เกี่ยวข้อง
official
rebuilding-flutter-tool
flutter
สร้างเครื่องมือ Flutter และ CLI ขึ้นมาใหม่ ใช้เมื่อผู้ใช้ขอให้คอมไพล์ อัปเดต สร้างใหม่ หรือสร้างเครื่องมือ Flutter หรือ CLI ขึ้นมาใหม่
official
upgrade-browser
flutter
อัปเกรดเวอร์ชันเบราว์เซอร์ (Chrome หรือ Firefox) ในการทดสอบ Flutter Web Engine และ/หรือ Framework ใช้เมื่อถูกขอให้โรลหรืออัปเกรด Chrome หรือ Firefox เป็นเวอร์ชันที่ใหม่กว่า…
official
create-catalog-item
flutter
ใช้ทักษะนี้เมื่อผู้ใช้ขอให้สร้าง CatalogItem, data class และ/หรือ widget class ใหม่ตามคำจำกัดความ JSON Schema ในแอปพลิเคชันที่ใช้…
official
genui-helper
flutter
ทักษะนี้มีเวิร์กโฟลว์และแนวปฏิบัติที่ดีที่สุดเฉพาะสำหรับพื้นที่เก็บข้อมูล genui
official