본문으로 건너뛰기
cccskills
무료GitHub에 공개

flutter-use-column-row-first

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

설치 방법 보기

포함된 파일(4)

  • SKILL.md5.2 KB
  • agents/openai.yaml217 B
  • assets/flutter-nested-row-column-diagram_by_docs.flutter.dev.png46.6 KB
  • assets/flutter-row-column-pavlova-layout_by_docs.flutter.dev.png528.8 KB

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:

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

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Use when working on accessibility, a11y, WCAG, ARIA, screen readers, keyboard nav, focus order, contrast, alt text, captions, reduced motion, or target sizes; not language/culture/device (see inclusive-design).

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

evanca/flutter-ai-rules6532026년 10월 10일 업데이트

Use when creating a feature, designing folder structure, adding repositories/services/view models, wiring dependency injection, or deciding which layer owns logic.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

evanca/flutter-ai-rules6532026년 10월 10일 업데이트

bloc

무료

Use when creating a Cubit or Bloc, modeling state with sealed classes or status enums, wiring BlocBuilder/BlocListener/BlocProvider, writing bloc tests, or choosing between Cubit and Bloc.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

evanca/flutter-ai-rules6532026년 10월 10일 업데이트

Use when asked to review a PR, MR, branch, or diff, audit changed files, or check code quality.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

evanca/flutter-ai-rules6532026년 10월 10일 업데이트

Use when writing switch statements, refactoring if-else chains, creating data classes, choosing records vs classes, destructuring values, or modernizing pre-Dart-3 code.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

evanca/flutter-ai-rules6532026년 10월 10일 업데이트

Use when building AI agents in Dart, implementing Genkit flows or tools, integrating LLMs into Dart or Flutter applications, or using Genkit Dart plugins.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

evanca/flutter-ai-rules6532026년 10월 10일 업데이트

evanca의 스킬 모두 보기

이 스킬의 문제 신고