本文へ移動
cccskills
無料GitHub で公開

flutter-atomic-components

Use when adding or reusing Flutter UI - organize widgets as atoms, molecules, and organisms in a shared library and never hand-roll a component that already exists

インストール方法を見る

含まれるファイル(1)

  • SKILL.md4.1 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Flutter Atomic Components

Overview

The same atomic-design discipline the web app follows applies to Flutter: build a shared component library organized by level and compose screens from it. This keeps the app visually consistent and makes screens small.

Core principle: Reuse before you build. Before writing any button/card/chip/input/list-row, search the component library — hand-rolling a duplicate is a review-blocking defect.

The Levels

LevelWhatFlutter example
AtomSmallest reusable UI, no app logicAppButton, AppTextField, StatusChip, Avatar
MoleculeA few atoms forming a unitTaskCard (title + chip + avatar), SearchBar
OrganismSection built from molecules/atomsTaskList, BoardColumn, AppBarWithActions
ScreenRoute wiring organisms to stateTaskBoardScreen

Library lives under lib/ui/core/{atoms,molecules,organisms} — the official Flutter architecture layout — alongside lib/ui/features/<feature>/ for screen-specific composition; follow the app's existing layout if it differs (e.g. a flat lib/ui/atoms).

INVENTORY.md

lib/ui/core/INVENTORY.md: header One line per component: level · name · purpose · variants, one bullet per component, added in the same commit that creates or meaningfully changes it. Check it before building anything — it's faster than grepping the tree and it's the thing the next task's agent will actually read. If the repo has no component library or theme yet, load mobile-design-system-foundation first.

Rules

  • Before creating a component, check INVENTORY.md / grep the library. If an atom exists, use it. If it almost fits, extend it backward-compatibly — don't fork a near-duplicate.
  • Place new components at the correct level. A button is an atom; a card composed of atoms is a molecule. A "component" that fetches data is not a component — split the presentation out.
  • Atoms take data + callbacks, never talk to services. AppButton({required this.label, required this.onPressed}). State/data flows from the screen down.
  • Atoms carry no outer margin of their own — spacing between atoms is the parent's job (a Row/Column with spacing:, or explicit SizedBox/padding at the call site), so the same atom composes correctly in every context without fighting a built-in margin.
  • Style through the theme (see flutter-widget-architecture) so every instance of an atom looks identical.
  • Changing a shared atom: grep every call site first; keep the change backward-compatible or update all callers in the same task. The build must stay green.

Worked Example

Task: "add a priority badge to task cards." Wrong: add a Container with a colored label inline in TaskCard. Right:

  1. Check INVENTORY.md / grep atoms → no PriorityBadge, but there is a StatusChip atom. Priority is distinct enough → add a PriorityBadge atom next to it, themed the same way.
  2. Compose it into the TaskCard molecule.
  3. Both the badge atom and the card get a widget test.
  4. Add the PriorityBadge line to INVENTORY.md in the same commit.

Now every screen showing a task card gets the badge for free, consistently.

Common Mistakes

  • Inline Container/Text styling that reinvents an existing atom.
  • A component with a network/service call inside → not a component.
  • New component dumped at the wrong level (an organism where an atom belongs).
  • Breaking a shared atom's constructor without updating callers.
  • A new component added to the library with no INVENTORY.md line.
  • An atom with a built-in outer margin, so it looks right in one layout and wrong in the next.

Red Flags

  • Two screens render visually identical buttons built differently.
  • A "widget" imports a repository or http client.
  • Copy-pasted styled Containers across screens.
  • lib/ui/core/ (or the repo's component folder) with no INVENTORY.md.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Use when writing acceptance criteria for a task - express each as an observable Given/When/Then that QA can execute, including negative cases

日本語の概要は準備中です。原文の説明を表示しています。

makifbaysal/tasktrooper1122026年10月10日 更新

Use when the diff adds or changes an endpoint, resolver, RPC, job or query that takes an object id, a role check, a request binding or a tenant filter - BOLA/IDOR, function-level authorization, mass assignment and tenant scoping

日本語の概要は準備中です。原文の説明を表示しています。

makifbaysal/tasktrooper1122026年10月10日 更新

Use on every UI change - semantic HTML, labels for controls, keyboard-navigable dialogs/menus, visible focus, and never color as the only signal

日本語の概要は準備中です。原文の説明を表示しています。

makifbaysal/tasktrooper1122026年10月10日 更新

Use when a task changes any screen, form, dialog, menu or control - Lighthouse/axe scan of the changed screens, a keyboard walk, and the thresholds that fail a task

日本語の概要は準備中です。原文の説明を表示しています。

makifbaysal/tasktrooper1122026年10月10日 更新

How to work a task returned with review, QA or UAT findings. Use when a task is in need_revision or PR review comments are in your context.

日本語の概要は準備中です。原文の説明を表示しています。

makifbaysal/tasktrooper1122026年10月10日 更新

Use when deciding whether a request needs an analiz task before implementation - the conditions that require the architect's analysis versus going straight to implementation

日本語の概要は準備中です。原文の説明を表示しています。

makifbaysal/tasktrooper1122026年10月10日 更新

makifbaysal のスキルをすべて見る

このスキルの問題を報告する