[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-flutter-flutter-fix-layout-issues":3,"mdc-ktb3iu-key":31,"related-org-flutter-flutter-fix-layout-issues":1074,"related-repo-flutter-flutter-fix-layout-issues":1211},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":21,"repoUrl":22,"updatedAt":23,"license":24,"forks":25,"topics":26,"repo":27,"sourceUrl":29,"mdContent":30},"flutter-fix-layout-issues","fix Flutter layout and overflow errors","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.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"flutter","Flutter (Google)","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fflutter.png",[12,15,18],{"name":13,"slug":8,"type":14},"Flutter","tag",{"name":16,"slug":17,"type":14},"Mobile","mobile",{"name":19,"slug":20,"type":14},"Debugging","debugging",2664,"https:\u002F\u002Fgithub.com\u002Fflutter\u002Fagent-plugins","2026-07-15T05:22:26.317162",null,155,[],{"repoUrl":22,"stars":21,"forks":25,"topics":28,"description":24},[],"https:\u002F\u002Fgithub.com\u002Fflutter\u002Fagent-plugins\u002Ftree\u002FHEAD\u002Fskills\u002Fflutter-fix-layout-issues","---\nname: flutter-fix-layout-issues\ndescription: 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.\nmetadata:\n  model: models\u002Fgemini-3.1-pro-preview\n  last_modified: Tue, 21 Apr 2026 19:45:59 GMT\n---\n# Resolving Flutter Layout Errors\n\n## Contents\n- [Constraint Violation Diagnostics](#constraint-violation-diagnostics)\n- [Layout Error Resolution Workflow](#layout-error-resolution-workflow)\n- [Examples](#examples)\n\n## Constraint Violation Diagnostics\n\nFlutter 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. \n\nDiagnose layout failures using the following error signatures:\n\n*   **\"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.\n*   **\"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.\n*   **\"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.\n*   **\"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`).\n*   **\"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\u002Fwidth error).\n\n## Layout Error Resolution Workflow\n\nCopy and use this checklist to systematically resolve layout constraint violations.\n\n### Task Progress\n- [ ] Run the application in debug mode to capture the exact layout exception in the console.\n- [ ] Identify the primary error message (ignore cascading \"RenderBox was not laid out\" errors).\n- [ ] Apply the conditional fix based on the specific error type:\n  - **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.\n  - **If \"An InputDecorator...cannot have an unbounded width\"**: Wrap the `TextField` or `TextFormField` in an `Expanded` or `Flexible` widget.\n  - **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).\n  - **If \"Incorrect use of ParentData widget\"**: Move the `ParentDataWidget` to be a direct child of its required parent. Ensure `Expanded`\u002F`Flexible` are direct children of `Row`\u002F`Column`\u002F`Flex`. Ensure `Positioned` is a direct child of `Stack`.\n- [ ] Execute Flutter hot reload.\n- [ ] Run validator -> review errors -> fix: Inspect the UI to verify the red\u002Fgrey error screen or yellow\u002Fblack overflow stripes are resolved. If new layout errors appear, repeat the workflow.\n\n## Examples\n\n### Fixing Unbounded Height (ListView in Column)\n\n**Input (Error State):**\n```dart\n\u002F\u002F Throws \"Vertical viewport was given unbounded height\"\nColumn(\n  children: \u003CWidget>[\n    const Text('Header'),\n    ListView(\n      children: const \u003CWidget>[\n        ListTile(title: Text('Item 1')),\n        ListTile(title: Text('Item 2')),\n      ],\n    ),\n  ],\n)\n```\n\n**Output (Resolved State):**\n```dart\n\u002F\u002F Wrap ListView in Expanded to constrain its height to the remaining Column space\nColumn(\n  children: \u003CWidget>[\n    const Text('Header'),\n    Expanded(\n      child: ListView(\n        children: const \u003CWidget>[\n          ListTile(title: Text('Item 1')),\n          ListTile(title: Text('Item 2')),\n        ],\n      ),\n    ),\n  ],\n)\n```\n\n### Fixing Unbounded Width (TextField in Row)\n\n**Input (Error State):**\n```dart\n\u002F\u002F Throws \"An InputDecorator...cannot have an unbounded width\"\nRow(\n  children: [\n    const Icon(Icons.search),\n    TextField(), \n  ],\n)\n```\n\n**Output (Resolved State):**\n```dart\n\u002F\u002F Wrap TextField in Expanded to constrain its width to the remaining Row space\nRow(\n  children: [\n    const Icon(Icons.search),\n    Expanded(\n      child: TextField(),\n    ),\n  ],\n)\n```\n\n### Fixing RenderFlex Overflow\n\n**Input (Error State):**\n```dart\n\u002F\u002F Throws \"A RenderFlex overflowed by X pixels on the right\"\nRow(\n  children: [\n    const Icon(Icons.info),\n    const Text('This is a very long text string that will definitely overflow the available screen width and cause a RenderFlex error.'),\n  ],\n)\n```\n\n**Output (Resolved State):**\n```dart\n\u002F\u002F Wrap the Text widget in Expanded to force it to wrap within the available constraints\nRow(\n  children: [\n    const Icon(Icons.info),\n    Expanded(\n      child: const Text('This is a very long text string that will definitely overflow the available screen width and cause a RenderFlex error.'),\n    ),\n  ],\n)\n```\n",{"data":32,"body":36},{"name":4,"description":6,"metadata":33},{"model":34,"last_modified":35},"models\u002Fgemini-3.1-pro-preview","Tue, 21 Apr 2026 19:45:59 GMT",{"type":37,"children":38},"root",[39,48,55,88,93,107,112,264,269,274,281,501,506,512,520,641,649,764,770,777,838,845,917,923,930,989,996,1068],{"type":40,"tag":41,"props":42,"children":44},"element","h1",{"id":43},"resolving-flutter-layout-errors",[45],{"type":46,"value":47},"text","Resolving Flutter Layout Errors",{"type":40,"tag":49,"props":50,"children":52},"h2",{"id":51},"contents",[53],{"type":46,"value":54},"Contents",{"type":40,"tag":56,"props":57,"children":58},"ul",{},[59,70,79],{"type":40,"tag":60,"props":61,"children":62},"li",{},[63],{"type":40,"tag":64,"props":65,"children":67},"a",{"href":66},"#constraint-violation-diagnostics",[68],{"type":46,"value":69},"Constraint Violation Diagnostics",{"type":40,"tag":60,"props":71,"children":72},{},[73],{"type":40,"tag":64,"props":74,"children":76},{"href":75},"#layout-error-resolution-workflow",[77],{"type":46,"value":78},"Layout Error Resolution Workflow",{"type":40,"tag":60,"props":80,"children":81},{},[82],{"type":40,"tag":64,"props":83,"children":85},{"href":84},"#examples",[86],{"type":46,"value":87},"Examples",{"type":40,"tag":49,"props":89,"children":91},{"id":90},"constraint-violation-diagnostics",[92],{"type":46,"value":69},{"type":40,"tag":94,"props":95,"children":96},"p",{},[97,99,105],{"type":46,"value":98},"Flutter layout operates on a strict rule: ",{"type":40,"tag":100,"props":101,"children":102},"strong",{},[103],{"type":46,"value":104},"Constraints go down. Sizes go up. Parent sets position.",{"type":46,"value":106}," Layout errors occur when this negotiation fails, typically due to unbounded constraints or unconstrained children.",{"type":40,"tag":94,"props":108,"children":109},{},[110],{"type":46,"value":111},"Diagnose layout failures using the following error signatures:",{"type":40,"tag":56,"props":113,"children":114},{},[115,150,184,207,254],{"type":40,"tag":60,"props":116,"children":117},{},[118,123,125,132,134,140,142,148],{"type":40,"tag":100,"props":119,"children":120},{},[121],{"type":46,"value":122},"\"Vertical viewport was given unbounded height\"",{"type":46,"value":124},": Triggered when a scrollable widget (",{"type":40,"tag":126,"props":127,"children":129},"code",{"className":128},[],[130],{"type":46,"value":131},"ListView",{"type":46,"value":133},", ",{"type":40,"tag":126,"props":135,"children":137},{"className":136},[],[138],{"type":46,"value":139},"GridView",{"type":46,"value":141},") is placed inside an unconstrained vertical parent (",{"type":40,"tag":126,"props":143,"children":145},{"className":144},[],[146],{"type":46,"value":147},"Column",{"type":46,"value":149},"). The parent provides infinite height, and the child attempts to expand infinitely.",{"type":40,"tag":60,"props":151,"children":152},{},[153,158,160,166,168,174,176,182],{"type":40,"tag":100,"props":154,"children":155},{},[156],{"type":46,"value":157},"\"An InputDecorator...cannot have an unbounded width\"",{"type":46,"value":159},": Triggered when a ",{"type":40,"tag":126,"props":161,"children":163},{"className":162},[],[164],{"type":46,"value":165},"TextField",{"type":46,"value":167}," or ",{"type":40,"tag":126,"props":169,"children":171},{"className":170},[],[172],{"type":46,"value":173},"TextFormField",{"type":46,"value":175}," is placed inside an unconstrained horizontal parent (",{"type":40,"tag":126,"props":177,"children":179},{"className":178},[],[180],{"type":46,"value":181},"Row",{"type":46,"value":183},"). The text field attempts to determine its width based on infinite available space.",{"type":40,"tag":60,"props":185,"children":186},{},[187,192,194,199,200,205],{"type":40,"tag":100,"props":188,"children":189},{},[190],{"type":46,"value":191},"\"RenderFlex overflowed\"",{"type":46,"value":193},": Triggered when a child of a ",{"type":40,"tag":126,"props":195,"children":197},{"className":196},[],[198],{"type":46,"value":181},{"type":46,"value":167},{"type":40,"tag":126,"props":201,"children":203},{"className":202},[],[204],{"type":46,"value":147},{"type":46,"value":206}," requests a size larger than the parent's allocated constraints. Visually indicated by yellow and black warning stripes.",{"type":40,"tag":60,"props":208,"children":209},{},[210,215,216,222,224,230,232,238,239,245,246,252],{"type":40,"tag":100,"props":211,"children":212},{},[213],{"type":46,"value":214},"\"Incorrect use of ParentData widget\"",{"type":46,"value":159},{"type":40,"tag":126,"props":217,"children":219},{"className":218},[],[220],{"type":46,"value":221},"ParentDataWidget",{"type":46,"value":223}," is not a direct descendant of its required ancestor. (e.g., ",{"type":40,"tag":126,"props":225,"children":227},{"className":226},[],[228],{"type":46,"value":229},"Expanded",{"type":46,"value":231}," outside a ",{"type":40,"tag":126,"props":233,"children":235},{"className":234},[],[236],{"type":46,"value":237},"Flex",{"type":46,"value":133},{"type":40,"tag":126,"props":240,"children":242},{"className":241},[],[243],{"type":46,"value":244},"Positioned",{"type":46,"value":231},{"type":40,"tag":126,"props":247,"children":249},{"className":248},[],[250],{"type":46,"value":251},"Stack",{"type":46,"value":253},").",{"type":40,"tag":60,"props":255,"children":256},{},[257,262],{"type":40,"tag":100,"props":258,"children":259},{},[260],{"type":46,"value":261},"\"RenderBox was not laid out\"",{"type":46,"value":263},": A cascading side-effect error. Ignore this and look further up the stack trace for the primary constraint violation (usually an unbounded height\u002Fwidth error).",{"type":40,"tag":49,"props":265,"children":267},{"id":266},"layout-error-resolution-workflow",[268],{"type":46,"value":78},{"type":40,"tag":94,"props":270,"children":271},{},[272],{"type":46,"value":273},"Copy and use this checklist to systematically resolve layout constraint violations.",{"type":40,"tag":275,"props":276,"children":278},"h3",{"id":277},"task-progress",[279],{"type":46,"value":280},"Task Progress",{"type":40,"tag":56,"props":282,"children":285},{"className":283},[284],"contains-task-list",[286,299,308,483,492],{"type":40,"tag":60,"props":287,"children":290},{"className":288},[289],"task-list-item",[291,297],{"type":40,"tag":292,"props":293,"children":296},"input",{"disabled":294,"type":295},true,"checkbox",[],{"type":46,"value":298}," Run the application in debug mode to capture the exact layout exception in the console.",{"type":40,"tag":60,"props":300,"children":302},{"className":301},[289],[303,306],{"type":40,"tag":292,"props":304,"children":305},{"disabled":294,"type":295},[],{"type":46,"value":307}," Identify the primary error message (ignore cascading \"RenderBox was not laid out\" errors).",{"type":40,"tag":60,"props":309,"children":311},{"className":310},[289],[312,315,317],{"type":40,"tag":292,"props":313,"children":314},{"disabled":294,"type":295},[],{"type":46,"value":316}," Apply the conditional fix based on the specific error type:\n",{"type":40,"tag":56,"props":318,"children":319},{},[320,358,395,419],{"type":40,"tag":60,"props":321,"children":322},{},[323,328,330,335,336,341,343,348,350,356],{"type":40,"tag":100,"props":324,"children":325},{},[326],{"type":46,"value":327},"If \"Vertical viewport was given unbounded height\"",{"type":46,"value":329},": Wrap the scrollable child (",{"type":40,"tag":126,"props":331,"children":333},{"className":332},[],[334],{"type":46,"value":131},{"type":46,"value":133},{"type":40,"tag":126,"props":337,"children":339},{"className":338},[],[340],{"type":46,"value":139},{"type":46,"value":342},") in an ",{"type":40,"tag":126,"props":344,"children":346},{"className":345},[],[347],{"type":46,"value":229},{"type":46,"value":349}," widget to consume remaining space, or wrap it in a ",{"type":40,"tag":126,"props":351,"children":353},{"className":352},[],[354],{"type":46,"value":355},"SizedBox",{"type":46,"value":357}," to provide an absolute height constraint.",{"type":40,"tag":60,"props":359,"children":360},{},[361,366,368,373,374,379,381,386,387,393],{"type":40,"tag":100,"props":362,"children":363},{},[364],{"type":46,"value":365},"If \"An InputDecorator...cannot have an unbounded width\"",{"type":46,"value":367},": Wrap the ",{"type":40,"tag":126,"props":369,"children":371},{"className":370},[],[372],{"type":46,"value":165},{"type":46,"value":167},{"type":40,"tag":126,"props":375,"children":377},{"className":376},[],[378],{"type":46,"value":173},{"type":46,"value":380}," in an ",{"type":40,"tag":126,"props":382,"children":384},{"className":383},[],[385],{"type":46,"value":229},{"type":46,"value":167},{"type":40,"tag":126,"props":388,"children":390},{"className":389},[],[391],{"type":46,"value":392},"Flexible",{"type":46,"value":394}," widget.",{"type":40,"tag":60,"props":396,"children":397},{},[398,403,405,410,412,417],{"type":40,"tag":100,"props":399,"children":400},{},[401],{"type":46,"value":402},"If \"RenderFlex overflowed\"",{"type":46,"value":404},": Constrain the overflowing child by wrapping it in an ",{"type":40,"tag":126,"props":406,"children":408},{"className":407},[],[409],{"type":46,"value":229},{"type":46,"value":411}," widget (to force it to fit) or a ",{"type":40,"tag":126,"props":413,"children":415},{"className":414},[],[416],{"type":46,"value":392},{"type":46,"value":418}," widget (to allow it to be smaller than the allocated space).",{"type":40,"tag":60,"props":420,"children":421},{},[422,427,429,434,436,441,443,448,450,455,456,461,462,467,469,474,476,481],{"type":40,"tag":100,"props":423,"children":424},{},[425],{"type":46,"value":426},"If \"Incorrect use of ParentData widget\"",{"type":46,"value":428},": Move the ",{"type":40,"tag":126,"props":430,"children":432},{"className":431},[],[433],{"type":46,"value":221},{"type":46,"value":435}," to be a direct child of its required parent. Ensure ",{"type":40,"tag":126,"props":437,"children":439},{"className":438},[],[440],{"type":46,"value":229},{"type":46,"value":442},"\u002F",{"type":40,"tag":126,"props":444,"children":446},{"className":445},[],[447],{"type":46,"value":392},{"type":46,"value":449}," are direct children of ",{"type":40,"tag":126,"props":451,"children":453},{"className":452},[],[454],{"type":46,"value":181},{"type":46,"value":442},{"type":40,"tag":126,"props":457,"children":459},{"className":458},[],[460],{"type":46,"value":147},{"type":46,"value":442},{"type":40,"tag":126,"props":463,"children":465},{"className":464},[],[466],{"type":46,"value":237},{"type":46,"value":468},". Ensure ",{"type":40,"tag":126,"props":470,"children":472},{"className":471},[],[473],{"type":46,"value":244},{"type":46,"value":475}," is a direct child of ",{"type":40,"tag":126,"props":477,"children":479},{"className":478},[],[480],{"type":46,"value":251},{"type":46,"value":482},".",{"type":40,"tag":60,"props":484,"children":486},{"className":485},[289],[487,490],{"type":40,"tag":292,"props":488,"children":489},{"disabled":294,"type":295},[],{"type":46,"value":491}," Execute Flutter hot reload.",{"type":40,"tag":60,"props":493,"children":495},{"className":494},[289],[496,499],{"type":40,"tag":292,"props":497,"children":498},{"disabled":294,"type":295},[],{"type":46,"value":500}," Run validator -> review errors -> fix: Inspect the UI to verify the red\u002Fgrey error screen or yellow\u002Fblack overflow stripes are resolved. If new layout errors appear, repeat the workflow.",{"type":40,"tag":49,"props":502,"children":504},{"id":503},"examples",[505],{"type":46,"value":87},{"type":40,"tag":275,"props":507,"children":509},{"id":508},"fixing-unbounded-height-listview-in-column",[510],{"type":46,"value":511},"Fixing Unbounded Height (ListView in Column)",{"type":40,"tag":94,"props":513,"children":514},{},[515],{"type":40,"tag":100,"props":516,"children":517},{},[518],{"type":46,"value":519},"Input (Error State):",{"type":40,"tag":521,"props":522,"children":527},"pre",{"className":523,"code":524,"language":525,"meta":526,"style":526},"language-dart shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F Throws \"Vertical viewport was given unbounded height\"\nColumn(\n  children: \u003CWidget>[\n    const Text('Header'),\n    ListView(\n      children: const \u003CWidget>[\n        ListTile(title: Text('Item 1')),\n        ListTile(title: Text('Item 2')),\n      ],\n    ),\n  ],\n)\n","dart","",[528],{"type":40,"tag":126,"props":529,"children":530},{"__ignoreMap":526},[531,542,551,560,569,578,587,596,605,614,623,632],{"type":40,"tag":532,"props":533,"children":536},"span",{"class":534,"line":535},"line",1,[537],{"type":40,"tag":532,"props":538,"children":539},{},[540],{"type":46,"value":541},"\u002F\u002F Throws \"Vertical viewport was given unbounded height\"\n",{"type":40,"tag":532,"props":543,"children":545},{"class":534,"line":544},2,[546],{"type":40,"tag":532,"props":547,"children":548},{},[549],{"type":46,"value":550},"Column(\n",{"type":40,"tag":532,"props":552,"children":554},{"class":534,"line":553},3,[555],{"type":40,"tag":532,"props":556,"children":557},{},[558],{"type":46,"value":559},"  children: \u003CWidget>[\n",{"type":40,"tag":532,"props":561,"children":563},{"class":534,"line":562},4,[564],{"type":40,"tag":532,"props":565,"children":566},{},[567],{"type":46,"value":568},"    const Text('Header'),\n",{"type":40,"tag":532,"props":570,"children":572},{"class":534,"line":571},5,[573],{"type":40,"tag":532,"props":574,"children":575},{},[576],{"type":46,"value":577},"    ListView(\n",{"type":40,"tag":532,"props":579,"children":581},{"class":534,"line":580},6,[582],{"type":40,"tag":532,"props":583,"children":584},{},[585],{"type":46,"value":586},"      children: const \u003CWidget>[\n",{"type":40,"tag":532,"props":588,"children":590},{"class":534,"line":589},7,[591],{"type":40,"tag":532,"props":592,"children":593},{},[594],{"type":46,"value":595},"        ListTile(title: Text('Item 1')),\n",{"type":40,"tag":532,"props":597,"children":599},{"class":534,"line":598},8,[600],{"type":40,"tag":532,"props":601,"children":602},{},[603],{"type":46,"value":604},"        ListTile(title: Text('Item 2')),\n",{"type":40,"tag":532,"props":606,"children":608},{"class":534,"line":607},9,[609],{"type":40,"tag":532,"props":610,"children":611},{},[612],{"type":46,"value":613},"      ],\n",{"type":40,"tag":532,"props":615,"children":617},{"class":534,"line":616},10,[618],{"type":40,"tag":532,"props":619,"children":620},{},[621],{"type":46,"value":622},"    ),\n",{"type":40,"tag":532,"props":624,"children":626},{"class":534,"line":625},11,[627],{"type":40,"tag":532,"props":628,"children":629},{},[630],{"type":46,"value":631},"  ],\n",{"type":40,"tag":532,"props":633,"children":635},{"class":534,"line":634},12,[636],{"type":40,"tag":532,"props":637,"children":638},{},[639],{"type":46,"value":640},")\n",{"type":40,"tag":94,"props":642,"children":643},{},[644],{"type":40,"tag":100,"props":645,"children":646},{},[647],{"type":46,"value":648},"Output (Resolved State):",{"type":40,"tag":521,"props":650,"children":652},{"className":523,"code":651,"language":525,"meta":526,"style":526},"\u002F\u002F Wrap ListView in Expanded to constrain its height to the remaining Column space\nColumn(\n  children: \u003CWidget>[\n    const Text('Header'),\n    Expanded(\n      child: ListView(\n        children: const \u003CWidget>[\n          ListTile(title: Text('Item 1')),\n          ListTile(title: Text('Item 2')),\n        ],\n      ),\n    ),\n  ],\n)\n",[653],{"type":40,"tag":126,"props":654,"children":655},{"__ignoreMap":526},[656,664,671,678,685,693,701,709,717,725,733,741,748,756],{"type":40,"tag":532,"props":657,"children":658},{"class":534,"line":535},[659],{"type":40,"tag":532,"props":660,"children":661},{},[662],{"type":46,"value":663},"\u002F\u002F Wrap ListView in Expanded to constrain its height to the remaining Column space\n",{"type":40,"tag":532,"props":665,"children":666},{"class":534,"line":544},[667],{"type":40,"tag":532,"props":668,"children":669},{},[670],{"type":46,"value":550},{"type":40,"tag":532,"props":672,"children":673},{"class":534,"line":553},[674],{"type":40,"tag":532,"props":675,"children":676},{},[677],{"type":46,"value":559},{"type":40,"tag":532,"props":679,"children":680},{"class":534,"line":562},[681],{"type":40,"tag":532,"props":682,"children":683},{},[684],{"type":46,"value":568},{"type":40,"tag":532,"props":686,"children":687},{"class":534,"line":571},[688],{"type":40,"tag":532,"props":689,"children":690},{},[691],{"type":46,"value":692},"    Expanded(\n",{"type":40,"tag":532,"props":694,"children":695},{"class":534,"line":580},[696],{"type":40,"tag":532,"props":697,"children":698},{},[699],{"type":46,"value":700},"      child: ListView(\n",{"type":40,"tag":532,"props":702,"children":703},{"class":534,"line":589},[704],{"type":40,"tag":532,"props":705,"children":706},{},[707],{"type":46,"value":708},"        children: const \u003CWidget>[\n",{"type":40,"tag":532,"props":710,"children":711},{"class":534,"line":598},[712],{"type":40,"tag":532,"props":713,"children":714},{},[715],{"type":46,"value":716},"          ListTile(title: Text('Item 1')),\n",{"type":40,"tag":532,"props":718,"children":719},{"class":534,"line":607},[720],{"type":40,"tag":532,"props":721,"children":722},{},[723],{"type":46,"value":724},"          ListTile(title: Text('Item 2')),\n",{"type":40,"tag":532,"props":726,"children":727},{"class":534,"line":616},[728],{"type":40,"tag":532,"props":729,"children":730},{},[731],{"type":46,"value":732},"        ],\n",{"type":40,"tag":532,"props":734,"children":735},{"class":534,"line":625},[736],{"type":40,"tag":532,"props":737,"children":738},{},[739],{"type":46,"value":740},"      ),\n",{"type":40,"tag":532,"props":742,"children":743},{"class":534,"line":634},[744],{"type":40,"tag":532,"props":745,"children":746},{},[747],{"type":46,"value":622},{"type":40,"tag":532,"props":749,"children":751},{"class":534,"line":750},13,[752],{"type":40,"tag":532,"props":753,"children":754},{},[755],{"type":46,"value":631},{"type":40,"tag":532,"props":757,"children":759},{"class":534,"line":758},14,[760],{"type":40,"tag":532,"props":761,"children":762},{},[763],{"type":46,"value":640},{"type":40,"tag":275,"props":765,"children":767},{"id":766},"fixing-unbounded-width-textfield-in-row",[768],{"type":46,"value":769},"Fixing Unbounded Width (TextField in Row)",{"type":40,"tag":94,"props":771,"children":772},{},[773],{"type":40,"tag":100,"props":774,"children":775},{},[776],{"type":46,"value":519},{"type":40,"tag":521,"props":778,"children":780},{"className":523,"code":779,"language":525,"meta":526,"style":526},"\u002F\u002F Throws \"An InputDecorator...cannot have an unbounded width\"\nRow(\n  children: [\n    const Icon(Icons.search),\n    TextField(), \n  ],\n)\n",[781],{"type":40,"tag":126,"props":782,"children":783},{"__ignoreMap":526},[784,792,800,808,816,824,831],{"type":40,"tag":532,"props":785,"children":786},{"class":534,"line":535},[787],{"type":40,"tag":532,"props":788,"children":789},{},[790],{"type":46,"value":791},"\u002F\u002F Throws \"An InputDecorator...cannot have an unbounded width\"\n",{"type":40,"tag":532,"props":793,"children":794},{"class":534,"line":544},[795],{"type":40,"tag":532,"props":796,"children":797},{},[798],{"type":46,"value":799},"Row(\n",{"type":40,"tag":532,"props":801,"children":802},{"class":534,"line":553},[803],{"type":40,"tag":532,"props":804,"children":805},{},[806],{"type":46,"value":807},"  children: [\n",{"type":40,"tag":532,"props":809,"children":810},{"class":534,"line":562},[811],{"type":40,"tag":532,"props":812,"children":813},{},[814],{"type":46,"value":815},"    const Icon(Icons.search),\n",{"type":40,"tag":532,"props":817,"children":818},{"class":534,"line":571},[819],{"type":40,"tag":532,"props":820,"children":821},{},[822],{"type":46,"value":823},"    TextField(), \n",{"type":40,"tag":532,"props":825,"children":826},{"class":534,"line":580},[827],{"type":40,"tag":532,"props":828,"children":829},{},[830],{"type":46,"value":631},{"type":40,"tag":532,"props":832,"children":833},{"class":534,"line":589},[834],{"type":40,"tag":532,"props":835,"children":836},{},[837],{"type":46,"value":640},{"type":40,"tag":94,"props":839,"children":840},{},[841],{"type":40,"tag":100,"props":842,"children":843},{},[844],{"type":46,"value":648},{"type":40,"tag":521,"props":846,"children":848},{"className":523,"code":847,"language":525,"meta":526,"style":526},"\u002F\u002F Wrap TextField in Expanded to constrain its width to the remaining Row space\nRow(\n  children: [\n    const Icon(Icons.search),\n    Expanded(\n      child: TextField(),\n    ),\n  ],\n)\n",[849],{"type":40,"tag":126,"props":850,"children":851},{"__ignoreMap":526},[852,860,867,874,881,888,896,903,910],{"type":40,"tag":532,"props":853,"children":854},{"class":534,"line":535},[855],{"type":40,"tag":532,"props":856,"children":857},{},[858],{"type":46,"value":859},"\u002F\u002F Wrap TextField in Expanded to constrain its width to the remaining Row space\n",{"type":40,"tag":532,"props":861,"children":862},{"class":534,"line":544},[863],{"type":40,"tag":532,"props":864,"children":865},{},[866],{"type":46,"value":799},{"type":40,"tag":532,"props":868,"children":869},{"class":534,"line":553},[870],{"type":40,"tag":532,"props":871,"children":872},{},[873],{"type":46,"value":807},{"type":40,"tag":532,"props":875,"children":876},{"class":534,"line":562},[877],{"type":40,"tag":532,"props":878,"children":879},{},[880],{"type":46,"value":815},{"type":40,"tag":532,"props":882,"children":883},{"class":534,"line":571},[884],{"type":40,"tag":532,"props":885,"children":886},{},[887],{"type":46,"value":692},{"type":40,"tag":532,"props":889,"children":890},{"class":534,"line":580},[891],{"type":40,"tag":532,"props":892,"children":893},{},[894],{"type":46,"value":895},"      child: TextField(),\n",{"type":40,"tag":532,"props":897,"children":898},{"class":534,"line":589},[899],{"type":40,"tag":532,"props":900,"children":901},{},[902],{"type":46,"value":622},{"type":40,"tag":532,"props":904,"children":905},{"class":534,"line":598},[906],{"type":40,"tag":532,"props":907,"children":908},{},[909],{"type":46,"value":631},{"type":40,"tag":532,"props":911,"children":912},{"class":534,"line":607},[913],{"type":40,"tag":532,"props":914,"children":915},{},[916],{"type":46,"value":640},{"type":40,"tag":275,"props":918,"children":920},{"id":919},"fixing-renderflex-overflow",[921],{"type":46,"value":922},"Fixing RenderFlex Overflow",{"type":40,"tag":94,"props":924,"children":925},{},[926],{"type":40,"tag":100,"props":927,"children":928},{},[929],{"type":46,"value":519},{"type":40,"tag":521,"props":931,"children":933},{"className":523,"code":932,"language":525,"meta":526,"style":526},"\u002F\u002F Throws \"A RenderFlex overflowed by X pixels on the right\"\nRow(\n  children: [\n    const Icon(Icons.info),\n    const Text('This is a very long text string that will definitely overflow the available screen width and cause a RenderFlex error.'),\n  ],\n)\n",[934],{"type":40,"tag":126,"props":935,"children":936},{"__ignoreMap":526},[937,945,952,959,967,975,982],{"type":40,"tag":532,"props":938,"children":939},{"class":534,"line":535},[940],{"type":40,"tag":532,"props":941,"children":942},{},[943],{"type":46,"value":944},"\u002F\u002F Throws \"A RenderFlex overflowed by X pixels on the right\"\n",{"type":40,"tag":532,"props":946,"children":947},{"class":534,"line":544},[948],{"type":40,"tag":532,"props":949,"children":950},{},[951],{"type":46,"value":799},{"type":40,"tag":532,"props":953,"children":954},{"class":534,"line":553},[955],{"type":40,"tag":532,"props":956,"children":957},{},[958],{"type":46,"value":807},{"type":40,"tag":532,"props":960,"children":961},{"class":534,"line":562},[962],{"type":40,"tag":532,"props":963,"children":964},{},[965],{"type":46,"value":966},"    const Icon(Icons.info),\n",{"type":40,"tag":532,"props":968,"children":969},{"class":534,"line":571},[970],{"type":40,"tag":532,"props":971,"children":972},{},[973],{"type":46,"value":974},"    const Text('This is a very long text string that will definitely overflow the available screen width and cause a RenderFlex error.'),\n",{"type":40,"tag":532,"props":976,"children":977},{"class":534,"line":580},[978],{"type":40,"tag":532,"props":979,"children":980},{},[981],{"type":46,"value":631},{"type":40,"tag":532,"props":983,"children":984},{"class":534,"line":589},[985],{"type":40,"tag":532,"props":986,"children":987},{},[988],{"type":46,"value":640},{"type":40,"tag":94,"props":990,"children":991},{},[992],{"type":40,"tag":100,"props":993,"children":994},{},[995],{"type":46,"value":648},{"type":40,"tag":521,"props":997,"children":999},{"className":523,"code":998,"language":525,"meta":526,"style":526},"\u002F\u002F Wrap the Text widget in Expanded to force it to wrap within the available constraints\nRow(\n  children: [\n    const Icon(Icons.info),\n    Expanded(\n      child: const Text('This is a very long text string that will definitely overflow the available screen width and cause a RenderFlex error.'),\n    ),\n  ],\n)\n",[1000],{"type":40,"tag":126,"props":1001,"children":1002},{"__ignoreMap":526},[1003,1011,1018,1025,1032,1039,1047,1054,1061],{"type":40,"tag":532,"props":1004,"children":1005},{"class":534,"line":535},[1006],{"type":40,"tag":532,"props":1007,"children":1008},{},[1009],{"type":46,"value":1010},"\u002F\u002F Wrap the Text widget in Expanded to force it to wrap within the available constraints\n",{"type":40,"tag":532,"props":1012,"children":1013},{"class":534,"line":544},[1014],{"type":40,"tag":532,"props":1015,"children":1016},{},[1017],{"type":46,"value":799},{"type":40,"tag":532,"props":1019,"children":1020},{"class":534,"line":553},[1021],{"type":40,"tag":532,"props":1022,"children":1023},{},[1024],{"type":46,"value":807},{"type":40,"tag":532,"props":1026,"children":1027},{"class":534,"line":562},[1028],{"type":40,"tag":532,"props":1029,"children":1030},{},[1031],{"type":46,"value":966},{"type":40,"tag":532,"props":1033,"children":1034},{"class":534,"line":571},[1035],{"type":40,"tag":532,"props":1036,"children":1037},{},[1038],{"type":46,"value":692},{"type":40,"tag":532,"props":1040,"children":1041},{"class":534,"line":580},[1042],{"type":40,"tag":532,"props":1043,"children":1044},{},[1045],{"type":46,"value":1046},"      child: const Text('This is a very long text string that will definitely overflow the available screen width and cause a RenderFlex error.'),\n",{"type":40,"tag":532,"props":1048,"children":1049},{"class":534,"line":589},[1050],{"type":40,"tag":532,"props":1051,"children":1052},{},[1053],{"type":46,"value":622},{"type":40,"tag":532,"props":1055,"children":1056},{"class":534,"line":598},[1057],{"type":40,"tag":532,"props":1058,"children":1059},{},[1060],{"type":46,"value":631},{"type":40,"tag":532,"props":1062,"children":1063},{"class":534,"line":607},[1064],{"type":40,"tag":532,"props":1065,"children":1066},{},[1067],{"type":46,"value":640},{"type":40,"tag":1069,"props":1070,"children":1071},"style",{},[1072],{"type":46,"value":1073},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1075,"total":1210},[1076,1088,1099,1111,1120,1129,1141,1153,1165,1177,1191,1201],{"slug":1077,"name":1077,"fn":1078,"description":1079,"org":1080,"tags":1081,"stars":21,"repoUrl":22,"updatedAt":1087},"dart-add-unit-test","write unit tests for Dart code","Write and organize unit tests for functions, methods, and classes using `package:test`. Use when creating new logic or fixing bugs to ensure code remains correct and regression-free.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1082,1084],{"name":1083,"slug":525,"type":14},"Dart",{"name":1085,"slug":1086,"type":14},"Testing","testing","2026-07-15T05:22:40.104823",{"slug":1089,"name":1089,"fn":1090,"description":1091,"org":1092,"tags":1093,"stars":21,"repoUrl":22,"updatedAt":1098},"dart-build-cli-app","build Dart command line applications","Entrypoint structure, exit codes, cross-platform scripts. Use when building command line utilities, scripts, or applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1094,1097],{"name":1095,"slug":1096,"type":14},"CLI","cli",{"name":1083,"slug":525,"type":14},"2026-07-15T05:22:18.863572",{"slug":1100,"name":1100,"fn":1101,"description":1102,"org":1103,"tags":1104,"stars":21,"repoUrl":22,"updatedAt":1110},"dart-collect-coverage","collect Dart test coverage reports","Collect coverage using the coverage packge and create an LCOV report",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1105,1106,1109],{"name":1083,"slug":525,"type":14},{"name":1107,"slug":1108,"type":14},"Reporting","reporting",{"name":1085,"slug":1086,"type":14},"2026-07-15T05:22:21.38636",{"slug":1112,"name":1112,"fn":1113,"description":1114,"org":1115,"tags":1116,"stars":21,"repoUrl":22,"updatedAt":1119},"dart-fix-runtime-errors","debug and fix Dart runtime errors","Uses get_runtime_errors and lsp to fetch an active stack trace, locate the failing line, apply a fix, and verify resolution via hot_reload.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1117,1118],{"name":1083,"slug":525,"type":14},{"name":19,"slug":20,"type":14},"2026-07-15T05:22:22.622501",{"slug":1121,"name":1121,"fn":1122,"description":1123,"org":1124,"tags":1125,"stars":21,"repoUrl":22,"updatedAt":1128},"dart-generate-test-mocks","generate mock objects for Dart tests","Define and generate mock objects for external dependencies using `package:mockito` and `build_runner`. Use when unit testing classes that depend on complex external services like APIs or databases.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1126,1127],{"name":1083,"slug":525,"type":14},{"name":1085,"slug":1086,"type":14},"2026-07-15T05:22:42.607449",{"slug":1130,"name":1130,"fn":1131,"description":1132,"org":1133,"tags":1134,"stars":21,"repoUrl":22,"updatedAt":1140},"dart-migrate-to-checks-package","migrate test matchers to checks package","Replace the usage of `expect` and similar functions from `package:matcher`\nto `package:checks` equivalents.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1135,1136,1139],{"name":1083,"slug":525,"type":14},{"name":1137,"slug":1138,"type":14},"Migration","migration",{"name":1085,"slug":1086,"type":14},"2026-07-15T05:22:31.276564",{"slug":1142,"name":1142,"fn":1143,"description":1144,"org":1145,"tags":1146,"stars":21,"repoUrl":22,"updatedAt":1152},"dart-resolve-package-conflicts","resolve Dart package version conflicts","Workflow for fixing package version conflicts. Use this when `pub get` fails due to incompatible package versions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1147,1148,1149],{"name":1083,"slug":525,"type":14},{"name":19,"slug":20,"type":14},{"name":1150,"slug":1151,"type":14},"Engineering","engineering","2026-07-15T05:22:30.059335",{"slug":1154,"name":1154,"fn":1155,"description":1156,"org":1157,"tags":1158,"stars":21,"repoUrl":22,"updatedAt":1164},"dart-run-static-analysis","run static analysis and apply fixes","Execute `dart analyze` to identify warnings and errors, and use `dart fix --apply` to automatically resolve mechanical lint issues. Use during development to ensure code quality and before committing changes.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1159,1162,1163],{"name":1160,"slug":1161,"type":14},"Code Analysis","code-analysis",{"name":1083,"slug":525,"type":14},{"name":19,"slug":20,"type":14},"2026-07-15T05:22:23.861119",{"slug":1166,"name":1166,"fn":1167,"description":1168,"org":1169,"tags":1170,"stars":21,"repoUrl":22,"updatedAt":1176},"dart-setup-ffi-assets","package C\u002FC++ assets for Dart","Guides agents in compiling and packaging C\u002FC++ source code into dynamic or static libraries (Code Assets) using Dart's Native Assets hook system (via hook\u002Fbuild.dart and hook\u002Flink.dart utilizing package:hooks and package:native_toolchain_c). Use when a user asks to: 'setup native assets', 'compile C\u002FC++ source code', 'bundle dynamic libraries', 'build native C code', 'link native assets', 'implement build.dart or link.dart hooks', or 'integrate C\u002FC++ interop in Dart\u002FFlutter'. Helps agents avoid manual toolchain orchestration and configures secure hash-validated binary downloads or advanced linker tree-shaking with package:record_use mapping.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1171,1172,1175],{"name":1083,"slug":525,"type":14},{"name":1173,"slug":1174,"type":14},"Deployment","deployment",{"name":1150,"slug":1151,"type":14},"2026-07-15T05:22:20.138636",{"slug":1178,"name":1178,"fn":1179,"description":1180,"org":1181,"tags":1182,"stars":21,"repoUrl":22,"updatedAt":1190},"dart-skills-lint-setup","configure dart_skills_lint for Dart projects","Use this skill when you need to set up validation for AI agent skills in a Dart project for the first time.\nAdds the linter as a dev_dependency, creates a configuration file, and generates a baseline for legacy repos.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1183,1184,1187],{"name":1083,"slug":525,"type":14},{"name":1185,"slug":1186,"type":14},"Plugin Development","plugin-development",{"name":1188,"slug":1189,"type":14},"QA","qa","2026-07-15T05:22:47.488998",{"slug":1192,"name":1192,"fn":1193,"description":1194,"org":1195,"tags":1196,"stars":21,"repoUrl":22,"updatedAt":1200},"dart-skills-lint-validation","validate agent skills with dart_skills_lint","Use this skill when you need to validate AI agent skills with dart_skills_lint — running the linter, interpreting failures, fixing violations, and authoring custom rules.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1197,1198,1199],{"name":1083,"slug":525,"type":14},{"name":1185,"slug":1186,"type":14},{"name":1188,"slug":1189,"type":14},"2026-07-21T05:38:34.451024",{"slug":1202,"name":1202,"fn":1203,"description":1204,"org":1205,"tags":1206,"stars":21,"repoUrl":22,"updatedAt":1209},"dart-use-ffigen","generate FFI bindings with ffigen","Guide agents to use `package:ffigen` to automatically generate FFI bindings instead of writing them manually. Use this skill when a task involves writing new FFI bindings, extending C\u002FObjective-C\u002FSwift integrations, or replacing hand-crafted `dart:ffi` setups.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1207,1208],{"name":1083,"slug":525,"type":14},{"name":1150,"slug":1151,"type":14},"2026-07-15T05:22:17.592351",27,{"items":1212,"total":1251},[1213,1218,1223,1229,1234,1239,1245],{"slug":1077,"name":1077,"fn":1078,"description":1079,"org":1214,"tags":1215,"stars":21,"repoUrl":22,"updatedAt":1087},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1216,1217],{"name":1083,"slug":525,"type":14},{"name":1085,"slug":1086,"type":14},{"slug":1089,"name":1089,"fn":1090,"description":1091,"org":1219,"tags":1220,"stars":21,"repoUrl":22,"updatedAt":1098},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1221,1222],{"name":1095,"slug":1096,"type":14},{"name":1083,"slug":525,"type":14},{"slug":1100,"name":1100,"fn":1101,"description":1102,"org":1224,"tags":1225,"stars":21,"repoUrl":22,"updatedAt":1110},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1226,1227,1228],{"name":1083,"slug":525,"type":14},{"name":1107,"slug":1108,"type":14},{"name":1085,"slug":1086,"type":14},{"slug":1112,"name":1112,"fn":1113,"description":1114,"org":1230,"tags":1231,"stars":21,"repoUrl":22,"updatedAt":1119},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1232,1233],{"name":1083,"slug":525,"type":14},{"name":19,"slug":20,"type":14},{"slug":1121,"name":1121,"fn":1122,"description":1123,"org":1235,"tags":1236,"stars":21,"repoUrl":22,"updatedAt":1128},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1237,1238],{"name":1083,"slug":525,"type":14},{"name":1085,"slug":1086,"type":14},{"slug":1130,"name":1130,"fn":1131,"description":1132,"org":1240,"tags":1241,"stars":21,"repoUrl":22,"updatedAt":1140},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1242,1243,1244],{"name":1083,"slug":525,"type":14},{"name":1137,"slug":1138,"type":14},{"name":1085,"slug":1086,"type":14},{"slug":1142,"name":1142,"fn":1143,"description":1144,"org":1246,"tags":1247,"stars":21,"repoUrl":22,"updatedAt":1152},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1248,1249,1250],{"name":1083,"slug":525,"type":14},{"name":19,"slug":20,"type":14},{"name":1150,"slug":1151,"type":14},24]