value-objects-money-and-units
zakariaf/flutter-skills · skills.sh
Open source Repository Open in the app JSON README (API)
About
Skill publicada por zakariaf/flutter-skills no skills.sh. Instale com: npx skills add zakariaf/flutter-skills@value-objects-money-and-units
Details
- Kind
- Agent skills
- Publisher
- zakariaf
- Origin
- skillssh
- Category
- ferramentas
- Stars
- 52
- Forks
- 14
- Last push
- 2026-09-23T16:04:23Z
- Repository state
- ativo
- Language
- Dart
- License
- MIT
- Added
- 2026-10-07 05:34:16
- Updated
- 2026-10-07 05:34:16
- Origin id
zakariaf/flutter-skills/value-objects-money-and-units
README
<div align="center"> # 🦋 Flutter Agent Skills **Production-grade, reusable Flutter engineering skills for AI coding agents.** Architecture · Riverpod 3.x state · testing · persistence · i18n/RTL · accessibility · navigation · performance · shipping & monetization — and the codegen/CI/migration runbooks that keep them honest. [**Browse the catalog →**](https://zakaria.dev/Flutter-Skills/) · [Agent Skills standard](https://agentskills.io) · [Contributing](https://github.com/zakariaf/flutter-skills/blob/HEAD/CONTRIBUTING.md) `40 skills` · `Riverpod 3.x` · `Material 3` · `works with 70+ agents` · `MIT` </div> --- Each skill is a short, high-signal playbook that an agent loads **only when your task matches it**, then follows — the rules, the anti-patterns, and a definition of done. The rules are applied consistently across sessions, projects, and agents without bloating context. Built on the [**Agent Skills**](https://agentskills.io) open standard, so the same files work in **Claude Code, Cursor, Codex, Copilot, Gemini CLI, Windsurf, Cline, OpenCode** and 70+ more — not only Claude Code. These skills were distilled from more than ten production Flutter apps' private skill libraries (~120 skills), merged into one best-of-breed set, reconciled to a single canonical stack, and adversarially reviewed for API correctness — then extended with the shipping, monetization and determinism lessons from a multi-app studio that ships to the App Store. **Design-token specifics** (exact colours, radii, shadows, named design systems) and **app-domain skills** were intentionally left out — this is the general foundation, not any one app's look or domain. ## Quick start ```bash # Any agent (installs into 70+ tools via the open skills CLI) npx skills add zakariaf/Flutter-Skills # all skills npx skills add zakariaf/Flutter-Skills --list # browse first npx skills add zakariaf/Flutter-Skills --skill flutter-architecture ``` Prefer a native integration? See [How to use these skills](#how-to-use-these-skills) below. ## Design principles - **Riverpod 3.x first, but not Riverpod-only.** State/DI skills lead with a state-management-*agnostic* core, give the Riverpod 3.x "how", and close with a **Provider / `ChangeNotifier` appendix** so they still serve an app on Flutter's official-guide stack. - **Single-package first, workspace-aware.** Everything works for a plain single-package app; monorepo / pub-workspace / Melos guidance is fenced under *"when multi-package"*. - **One canonical stack.** Feature-first layout, Riverpod 3.x, `go_router`, Drift, `package:clock`, Material 3 — reconciled to a single vocabulary so the 40 skills never contradict each other. - **Structure, not aesthetics.** Design-system and component skills teach *how* tokens, themes, components, pages, and views are **structured** — never "the colour must be `#…`". - **Progressive disclosure.** Core skills ship a lean `SKILL.md` plus on-demand `references/`, `examples/`, and runnable `scripts/`; simpler skills are a single `SKILL.md`. - **Correct by construction.** Every snippet is idiomatic and conceptually compiles; rules come with the *why*, anti-patterns, a definition-of-done, and often a grep/analyze script that enforces them. ## The skills *Skills marked* ***(rich)*** *ship `references/`, `examples/`, and runnable `scripts/` alongside `SKILL.md`.* ***(manual-only)*** *skills are side-effecting runbooks an agent never fires on its own.* ### Core Flutter & Dart | Skill | What it governs | |---|---| | `state-management-riverpod` **(rich)** | Riverpod 3.x: one `Notifier`/`AsyncNotifier`/`StreamNotifier` per feature over immutable state, `watch`/`read`/`listen` split, providers-as-DI, `family`+`autoDispose`, single write path. | | `widget-composition` **(rich)** | Small `const` `Widget` classes over `_buildX()` methods, lean `build()`, dumb Views, key policy, controller disposal, plus structural layout. | | `dart3-idioms-and-coding-standards` **(rich)** | Which Dart 3 construct each declaration earns: `sealed` + exhaustive `switch`, class modifiers, records intra-layer only, immutable value types, the complexity-limit table. | | `async-safety` | No-silent-failure async: the arrow-callback `Future`-drop hole no lint catches, `mounted` guards after every `await`, subscription/timer disposal. | | `naming-conventions` | Effective Dart naming + role suffixes (`Screen`/`Notifier`/`Repository`/`Service`/`Gateway`/`Failure`) so a name reveals the layer. | | `flutter-performance` | `const` subtrees, rebuilds narrowed via `.select`, lazy lists/slivers, off-isolate work, sized image decode, surgical `RepaintBoundary`, profile-mode measurement. | | `app-startup-and-bootstrap` | `main()` ordering: crash log + two global error handlers first, settings before `runApp`, composition-root DI overrides, lifecycle flush, no `runZonedGuarded`. | | `dartdoc-conventions` | `///` on every public API, standalone one-sentence summary, documented units/ranges/throws, `//` explains *why* not *what*. | | `ui-states-and-feedback` **(rich)** | The non-happy paths: loading/empty/error/content resolved in one `switch`, delayed skeletons, filtered-empty vs empty, typed-`Failure` error text with retry, the inline → snackbar → banner → dialog ladder, Undo over confirm. | | `forms-and-input` **(rich)** | `Form`/`TextFormField`, sync + async validation, `FocusNode` traversal, keyboard actions, input formatters, error display, controller disposal. | | `local-notifications-scheduler` **(rich)** | On-device reminders: DB is the only source of truth, one idempotent `syncNotifications()` reconcile, plugin behind a gateway port, DST-correct recurrence, iOS 64-cap budgeting. | ### Architecture | Skill | What it governs | |---|---| | `flutter-architecture` **(rich)** | Right-sized feature-first layered MVVM: features are folders, foundations become packages only when a compile wall earns it, downward-only DAG, single write-path repositories. | | `navigation-and-routing` **(rich)** | One `go_router` in `lib/routing/`, deep-link identity in path params, redirect guards via `refreshListenable`, `StatefulShellRoute` shells, `PopScope`, 404. | | `error-handling-typed-results` **(rich)** | Sealed `Result<T,F>` + per-boundary sealed `Failure` returned instead of thrown, exhaustive switches, a global error net, never-lose-data. | | `service-boundary-and-native` **(rich)** | Every side effect / native channel behind an injectable `Service`/`Gateway` that throws until overridden, one live impl per flavor, `MethodChannel` quarantined to one dir. | ### Structure & foundations | Skill | What it governs | |---|---| | `project-structure-and-packages` **(rich)** | The canonical feature-first tree (`lib/features/` + shared `core`/`data`/`services`/`routing`/`theme`), one public barrel over private `src/`, one-way dependency layering. | | `design-system-structure` **(rich)** | *Token-agnostic* design-system organization: tokens→theme→modifiers layering, two-tier tokens via `ThemeExtension`, no-raw-values CI gate. | | `adaptive-layout` **(rich)** | Adapt by size not device: Material 3 window size classes, `LayoutBuilder`/`MediaQuery.sizeOf`, list-detail two-pane, `NavigationRail`-vs-`BottomNav` by width. | | `custom-canvas-and-gestures` **(rich)** | `CustomPainter` technique: View/Painter/Scene split, `shouldRepaint` as one value compare, one shared transform read by painter *and* hit-tester, gesture→typed-command. | | `motion-and-haptics` **(rich)** | What the motion tokens are spent on: same-frame acknowledgment, a declared moment catalog, one haptic per commit from an event map, interruptible animation, bounded celebration, stop conditions. | ### Data | Skill | What it governs | |---|---| | `persistence-drift` **(rich)** | Drift/SQLite behind DAOs mapping rows to value objects, schema-level invariants, one-transaction-per-mutation, scoped `.watch` streams, WAL-safe backups. | | `value-objects-money-and-units` **(rich)** | Store canonically (integer minor units keyed to real ISO-4217 exponent, SI ints, UTC), convert only at the edge, one largest-remainder `allocate()`, inject a `Clock`. | | `data-export-and-restore` **(rich)** | Portable data: a versioned+checksummed backup envelope, all-or-nothing restore via staging-then-swap, canonical values in machine formats, RFC 4180 + formula-injection-safe CSV, share behind a Gateway. | ### Quality & testing | Skill | What it governs | |---|---| | `testing-strategy` **(rich)** | Test shape follows code not the pyramid: clock-injected pure core, fakes over mocks for owned code, property/fuzz with independent oracles, one acceptance gate. | | `widget-golden-and-a11y-testing` **(rich)** | `pumpApp` harness with device/`MediaQuery` presets, per-(device,scale,bold) overflow matrix, two golden lanes, RTL goldens, honest a11y limits. | | `lint-and-style-config` **(rich)** | A strict `analysis_options.yaml`: `very_good_analysis` + `strict-casts`/`strict-raw-types`, silent-failure lints promoted to error, suppression discipline. | | `seeded-determinism-and-golden-vectors` **(rich)** | Output every device must compute identically: injected key, civil-date days, one seeded entropy source, regenerate-don't-store, versioned cutovers, a frozen fingerprint table from an independent oracle. | ### Internationalization & accessibility | Skill | What it governs | |---|---| | `i18n-rtl-l10n` **(rich)** | gen-l10n/ARB with key+placeholder parity, ICU plurals, `Directional`-only geometry, bidi isolation, canonical-store + localize-at-render, numeral normalize-before-parse, vendored delegates for a locale `flutter_localizations` lacks. | | `accessibility-as-code` | A11y as a correctness property: `Semantics` on every node, read a11y flags from `MediaQuery`, never clamp `textScaler`, never colour-alone, 44px targets. | ### Shipping & monetization | Skill | What it governs | |---|---| | `release-and-store-shipping` **(rich)** | From green CI to a shipped build: `x.y.z+N` as the only version source, no keys in the repo, archived obfuscation symbols, merged-manifest permission audit, store declarations read back rather than trusted, size/startup budgets, staged rollout. | | `ads-and-iap-monetization` **(rich)** | Opt-in rewarded grants on a sealed outcome, per-day caps, preload-or-hide so a control never dead-ends, service-owned interstitial caps, one entitlement gate, and restore *before* the ad SDK initializes. | ### Workflows & tooling | Skill | What it governs | |---|---| | `flutter-conventions-index` | The front door: the non-negotiable house rules plus a routing table pointing each task to the right deep-dive skill, and a recommended build order. | | `scaffold-feature-module` **(rich)** | Stand up one feature: dumb View + 1:1 `Notifier` ViewModel + `widgets/` + scoped providers, single write path, typed `go_router` route, ARB parity. | | `codegen-and-toolchain` **(rich)** | `build_runner` + toolchain: workspace linking, SDK pinning, per-package `build.yaml`, `--delete-conflicting-outputs`, commit-vs-gitignore, analyzer/coverage excludes. | | `ci-pipeline-and-gates` **(rich)** | GitHub Actions Flutter CI: pinned toolchain, `format`/`analyze --fatal-infos`, codegen+schema freshness gates, randomized test order, coverage-as-report-not-gate. | | `dependency-hygiene` **(rich)** | Caret ranges + committed lock, SDK pinning, version-pinned lint include, transitive-tree auditing, vendoring a bus-factor-1 plugin behind an interface. | | `design-review-workflow` | Once-per-app end-of-build QA sweep: every screen × light/dark × LTR+RTL × largest text × reduce-motion, graded BLOCKER/FIX/NOTE, a dated sign-off that gates release. | | `run-codegen` *(manual-only)* | The deterministic `build_runner` pass before analyze: the pinned command with `--delete-conflicting-outputs`, never hand-edit or commit-force generated output. | | `run-migration` *(manual-only)* | The forward-only Drift/SQLite migration ritual: mandatory pre-migration snapshot, bump by one, append-only steps, tests over every from→to path + a forced-throw restore. | | `run-goldens-rebaseline` *(manual-only)* | The only sanctioned way committed golden images are overwritten: real assertions green first, blessing environment only, inspect every changed PNG, delete orphans, prove it without the flag. | > A full, searchable catalog with descriptions and filters lives on the > **[website](https://zakaria.dev/Flutter-Skills/)**. ## How to use these skills Skills **auto-load** when a task matches their `description` — you rarely invoke them by hand. You can also run one explicitly with `/<skill-name>` (or, installed as a plugin, `/flutter:<skill-name>`). ### Any agent — the universal installer ```bash npx skills add zakariaf/Flutter-Skills ``` The open [skills CLI](https://github.com/vercel-labs/skills) places the skills where your agent expects them (Cursor, Codex, Copilot, Cline, Windsurf, Gemini CLI, …). ### Claude Code — plugin marketplace ``` /plugin marketplace add zakariaf/Flutter-Skills /plugin install flutter@flutter-skills ``` ### Copy into a single project ```bash git clone https://github.com/zakariaf/Flutter-Skills mkdir -p .claude/skills && cp -R Flutter-Skills/skills/* .claude/skills/ ``` ### Personal-global (every project on your machine) ```bash for d in /path/to/Flutter-Skills/skills/*/; do ln -s "$d" "$HOME/.claude/skills/$(basename "$d")" done ``` ### Agents that read `AGENTS.md` [`AGENTS.md`](https://github.com/zakariaf/flutter-skills/blob/HEAD/AGENTS.md) carries an intent → skill map and usage instructions for any agent (Codex, Cursor, Copilot, …). Copy its guidance into a consuming project's own `AGENTS.md`. ## Repository layout ``` . ├── .claude-plugin/ # Claude Code plugin + marketplace manifests ├── .codex-plugin/ # Codex plugin manifest ├── AGENTS.md # cross-agent entry file (intent → skill map) ├── skills/ │ └── <skill-name>/ │ ├── SKILL.md # frontmatter (name + description) + the playbook │ ├── references/ # on-demand deep-dives (rich skills) │ ├── examples/ # complete, correct .dart samples (rich skills) │ └── scripts/ # runnable grep/analyze checks (rich skills) ├── skills.json # machine-readable catalog (for tooling & the site) ├── docs/ # the GitHub Pages website ├── README.md · CONTRIBUTING.md · LICENSE ``` ## Validating ```bash claude plugin validate . --strict # plugin + marketplace manifests find skills -name '*.sh' -print0 | xargs -0 -n1 bash -n # scripts parse ``` ## Contributing See [CONTRIBUTING.md](https://github.com/zakariaf/flutter-skills/blob/HEAD/CONTRIBUTING.md) for the skill format, the house conventions every skill must follow, and the checks to run before opening a PR. ## Provenance Distilled and merged from the skill libraries of more than ten production Flutter apps, reconciled to one canonical stack, then adversarially reviewed for API correctness (Riverpod 3.x, Drift, gen-l10n, WCAG) and scrubbed of design-token and app-domain specifics so they apply to any Flutter app. ## License [MIT](https://github.com/zakariaf/flutter-skills/blob/HEAD/LICENSE) © 2026 Zakaria Fatahi