agentleFS
evancaevanca/flutter-ai-rules/skills/flutter-use-column-row-first/SKILL.md

flutter-use-column-row-first

Skill669 starsChanged 3 months agoMITView on GitHub

Use when building any Flutter screen or component to choose responsive Row, Column, Expanded, Flexible, and Spacer layouts before fixed-size or coordinate-based alternatives.

The file

Show its rules and text

We split this skill into the rules it gives an agent

19 rules. About 0 are common, 6 are distinctive, and 13 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈6

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 13

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Start vertical groups with Column and horizontal groups with Row.

    line 14
  2. Very specific:

    Use Expanded, Flexible, and Spacer to distribute bounded free space.

    line 16
  3. Distinctive:

    Add padding, alignment, aspect ratio, and constraints intentionally.

    line 17
  4. Distinctive:

    Test narrow and wide constraints, text scaling, keyboard appearance, and long or localized content.

    line 18
  5. Very specific:

    Prefer Column for vertical flow and Row for horizontal flow.

    line 22
  6. Very specific:

    Use Expanded when a child must fill its allocated share of remaining main-axis space.

    line 24
  7. Very specific:

    Use Flexible when a child may use less than its allocated share.

    line 25
  8. Very specific:

    Use flex only to express proportional allocation.

    line 26
  9. Very specific:

    Use Spacer for flexible separation between siblings.

    line 27
  10. Very specific:

    Use ListView or another scrollable when vertical content can exceed the viewport.

    line 29
  11. Very specific:

    Use Wrap when horizontal children should move onto another run instead of shrinking or overflowing.

    line 30
  12. Very specific:

    Use LayoutBuilder, breakpoints, or adaptive widgets when the composition itself must change with available space.

    line 31
  13. Very specific:

    Use SafeArea when content must avoid system intrusions.

    line 32
  14. Distinctive:

    Avoid these as default layout mechanisms:

    line 36
  15. Distinctive:

    Use them when they serve a concrete purpose, such as:

    line 43
  16. Very specific:

    Put Expanded and Flexible only under Row, Column, or Flex.

    line 55
  17. Very specific:

    Do not use non-zero flex along an unbounded main axis.

    line 56
  18. Distinctive:

    Prefer scrolling for content that legitimately exceeds available space.

    line 59
  19. Distinctive:

    Use the diagrams as structural references, not as fixed pixel templates.

    line 97

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Flutter Use Column Row First

Build responsive Flutter layouts from the constraint system outward. Prefer simple flex composition and introduce fixed dimensions or overlays only when the design requires them for a concrete purpose.

Layout workflow

  1. Identify each group as primarily vertical, horizontal, overlapping, scrolling, or wrapping.
  2. Start vertical groups with Column and horizontal groups with Row.
  3. Nest small, named widgets instead of building one deeply nested build method.
  4. Use Expanded, Flexible, and Spacer to distribute bounded free space.
  5. Add padding, alignment, aspect ratio, and constraints intentionally.
  6. Test narrow and wide constraints, text scaling, keyboard appearance, and long or localized content.

Rules

  • Prefer Column for vertical flow and Row for horizontal flow.
  • Control alignment with mainAxisAlignment, crossAxisAlignment, and mainAxisSize.
  • Use Expanded when a child must fill its allocated share of remaining main-axis space.
  • Use Flexible when a child may use less than its allocated share.
  • Use flex only to express proportional allocation. A child with flex: 2 receives twice the free-space share of a sibling with flex: 1.
  • Use Spacer for flexible separation between siblings. Use SizedBox for deliberate, fixed gaps.
  • Wrap text or other variable-width content in Expanded or Flexible inside a Row when it must yield space to siblings.
  • Use ListView or another scrollable when vertical content can exceed the viewport; Column does not scroll.
  • Use Wrap when horizontal children should move onto another run instead of shrinking or overflowing.
  • Use LayoutBuilder, breakpoints, or adaptive widgets when the composition itself must change with available space.
  • Use SafeArea when content must avoid system intrusions.

Avoid rigid layouts

Avoid these as default layout mechanisms:

  • Stack with hardcoded Positioned coordinates
  • Container, SizedBox, or ConstrainedBox with hardcoded screen-like width or height
  • offsets, transforms, or margins used to simulate normal document flow
  • screen dimensions copied from a mockup

Use them when they serve a concrete purpose, such as:

  • true visual overlap, badges, floating controls, or anchored decoration
  • touch-target minimums, icon sizes, thumbnails, or bounded media
  • intentional maximum reading width
  • aspect-ratio requirements
  • platform or design-system constants

State the purpose in the code structure or a brief comment when it is not obvious.

Constraint safety

  • Put Expanded and Flexible only under Row, Column, or Flex.
  • Do not use non-zero flex along an unbounded main axis. In a vertical scrollable, remove vertical Expanded or Flexible, or establish a meaningful finite constraint.
  • Fix a nested Column that needs the outer column's remaining height by wrapping the inner column in Expanded.
  • Diagnose overflow by inspecting constraints and variable content before adding clipping or smaller hardcoded sizes.
  • Prefer scrolling for content that legitimately exceeds available space.

Preferred pattern

Padding(
  padding: const EdgeInsets.all(16),
  child: Column(
    crossAxisAlignment: CrossAxisAlignment.stretch,
    children: [
      const Header(),
      const SizedBox(height: 16),
      Expanded(
        child: Row(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            const Flexible(flex: 2, child: PrimaryContent()),
            const SizedBox(width: 16),
            const Flexible(child: SecondaryContent()),
          ],
        ),
      ),
      const SizedBox(height: 16),
      const Actions(),
    ],
  ),
)

Change this composition at a breakpoint if the horizontal content cannot remain usable on a narrow screen; do not merely squeeze it.

Visual references

Inspect these diagrams when decomposing a mockup into nested flex layouts:

  • Pavlova Row and Column layout shows the overall horizontal Row containing a vertical content Column and an image.
  • Nested Row and Column diagram shows smaller rating and icon groups decomposed into nested Row and Column widgets.

Use the diagrams as structural references, not as fixed pixel templates.

Verification

  • Confirm no RenderFlex overflow at supported viewport sizes.
  • Confirm text wraps or truncates intentionally.
  • Confirm flexible children receive bounded constraints.
  • Confirm scrollable content remains reachable.
  • Confirm fixed sizes and Stack or Positioned usages have a concrete design reason.

Sources

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.