Not in the top 1,000 by GitHub stars
gabuldev/flutter-skills
Claude Code skills for Flutter development - house conventions for Clean Architecture, Cubit, DI, theming, testing and Flutter web, generalised from production apps
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
skills/flutter-accessibility/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Instructions only
99570628666c → addd6d85e5d9
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 99570628666c
No earlier version was observed for comparison.
skills/flutter-caching/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Instructions only
99570628666c → addd6d85e5d9
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 99570628666c
No earlier version was observed for comparison.
skills/flutter-clean-arch/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Instructions only
99570628666c → addd6d85e5d9
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 99570628666c
No earlier version was observed for comparison.
skills/flutter-concurrency/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
99570628666c → addd6d85e5d9
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 99570628666c
No earlier version was observed for comparison.
skills/flutter-dart-style/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Instructions only
99570628666c → addd6d85e5d9
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 99570628666c
No earlier version was observed for comparison.
skills/flutter-design-system/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Instructions only
99570628666c → addd6d85e5d9
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 99570628666c
No earlier version was observed for comparison.
skills/flutter-di/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Instructions only
99570628666c → addd6d85e5d9
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 99570628666c
No earlier version was observed for comparison.
skills/flutter-forms/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Instructions only
99570628666c → addd6d85e5d9
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 99570628666c
No earlier version was observed for comparison.
skills/flutter-monorepo/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Instructions only
99570628666c → addd6d85e5d9
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 99570628666c
No earlier version was observed for comparison.
skills/flutter-new-module/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Instructions only
99570628666c → addd6d85e5d9
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 99570628666c
No earlier version was observed for comparison.
skills/flutter-run/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
99570628666c → addd6d85e5d9
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 99570628666c
No earlier version was observed for comparison.
skills/flutter-state/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Instructions only
99570628666c → addd6d85e5d9
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 99570628666c
No earlier version was observed for comparison.
skills/flutter-store-cd/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → addd6d85e5d9
No earlier version was observed for comparison.
skills/flutter-testing/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
99570628666c → addd6d85e5d9
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 99570628666c
No earlier version was observed for comparison.
skills/flutter-theming/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Instructions only
99570628666c → addd6d85e5d9
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 99570628666c
No earlier version was observed for comparison.
skills/flutter-web/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
99570628666c → addd6d85e5d9
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 99570628666c
No earlier version was observed for comparison.
Heat
4.9- Star growth, last 7 daysNot available
- Star growth, last 24 hoursNot available
- Rank movement, last 7 daysNot available
- Commits, last 30 daysNot available
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekNot available
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- flutter-accessibility
skills/flutter-accessibility - flutter-caching
skills/flutter-caching - flutter-clean-arch
skills/flutter-clean-arch - flutter-concurrency
skills/flutter-concurrency - flutter-dart-style
skills/flutter-dart-style - flutter-design-system
skills/flutter-design-system - flutter-di
skills/flutter-di - flutter-forms
skills/flutter-forms - flutter-monorepo
skills/flutter-monorepo - flutter-new-module
skills/flutter-new-module - flutter-run
skills/flutter-run - flutter-state
skills/flutter-state - flutter-store-cd
skills/flutter-store-cd - flutter-testing
skills/flutter-testing - flutter-theming
skills/flutter-theming - flutter-web
skills/flutter-web
How it works
flutter-accessibility
When your agent uses it
Use when implementing or auditing accessibility on a Flutter screen — the Semantics widget, screen-reader labels (TalkBack/VoiceOver), colour contrast, minimum tap-target size, system font scaling, or semantics in a web build. Also triggers on "make this accessible", "a11y", or a request for an accessibility review.
What it loads into context
Frontmatter
74 tokensAlways available to the agent
SKILL.md
2,724 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Context
- 1. Semantic Annotations
- 2. Color Contrast
- 3. Tap Targets
- 4. Screen Reader Support
- 5. Web Accessibility (any web build)
- 6. Font Scaling
- 7. Focus Management (Web)
- 8. Accessible Images
- 9. Accessible Forms
- 10. Audit Workflow
Files
SKILL.mdcore11,425 bytesSKILL.mdcore11,425 bytes
Read SKILL.md
You are implementing or auditing accessibility (a11y) for a Flutter app.
## Context
Accessibility pressure differs by surface, and it changes what you prioritise:
- **Customer-facing web** — the highest bar. Screen-reader semantics are off by
default on Flutter web (see section 5), the audience is unknown, and in many
jurisdictions this is a legal requirement, not a nicety.
- **Internal/admin web** — keyboard navigation and contrast matter most; staff
use these all day.
- **Mobile** — platform screen readers (TalkBack/VoiceOver) mostly work if you
give widgets labels and keep tap targets large enough.
View the complete source on GitHubflutter-caching
When your agent uses it
Use when implementing caching or offline behaviour in a Flutter feature - an offline-first repository, image caching, a Dio cache interceptor, a write sync queue, cache invalidation, or choosing between secure storage and shared_preferences. Also triggers on "make it work without internet", "store it locally", or "it is slow, it refetches every time".
What it loads into context
Frontmatter
79 tokensAlways available to the agent
SKILL.md
3,947 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Caching Strategy Selection
- 1. Offline-First Repository Pattern
- 2. Image Caching
- 3. In-Memory Dio Cache Interceptor
- 4. Sync Strategy for Writes (Local-First)
- 5. Cache Invalidation
- 6. SecureStorage vs SharedPreferences
- Instructions
Files
SKILL.mdcore16,942 bytes
Read SKILL.md
You are implementing caching for a Flutter feature. The patterns below assume Dio for HTTP, a secure-storage wrapper for sensitive data, `flutter_bloc` for state, and Clean Architecture (domain/data/presentation) - adapt the names to your stack, the shapes carry over.
## Caching Strategy Selection
| Strategy | When to Use | Package/Impl |
|---|---|---|
| `shared_preferences` | Non-sensitive key-value: UI prefs, filters, TTL timestamps, feature flags | `shared_preferences` |
| Secure storage | Auth tokens, credentials, sensitive user data. Wrap it in a `Storage` service with a `StorageKeys` enum rather than passing raw strings | `flutter_secure_storage` |
| In-memory cache | Short-lived GET responses, session-scoped data, computed values | Dio interceptor or Map in repository |
| `cached_network_image` | Product photos, logos, any remote image in list or detail screens | `cached_network_image` |
| Local DB (drift/sqflite) | Offline-first with complex queries (orders, history, large local datasets) | `drift` or `sqflite` |
**Rule of thumb**: SecureStorage for secrets, shared_preferences for preferences, in-memory for API responses, local DB for offline-first features.
View the complete source on GitHubflutter-clean-arch
When your agent uses it
Use when creating or auditing the layers of a Flutter feature or package - where a use case, repository, datasource, entity or model belongs; whether domain may import Flutter; whether a dependency between layers is inverted. Triggers on "where does this go?" in a feature, or a request for an architecture review.
What it loads into context
Frontmatter
72 tokensAlways available to the agent
SKILL.md
1,679 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Layer Responsibilities
- Full Feature Scaffold
- When argument is `audit`
- Architecture Rules
- Instructions
Files
SKILL.mdcore7,318 bytes
Read SKILL.md
You are working with Clean Architecture in a Flutter project.
## Layer Responsibilities
```
┌─────────────────────────────────────────┐
│ PRESENTATION │
│ Modules, Screens, Controllers (Cubits) │
│ Only knows: Domain entities + Usecases │
├─────────────────────────────────────────┤
│ DOMAIN (pure Dart, no Flutter) │
│ Entities, Repository interfaces, │
│ Usecases │
│ Depends on: nothing │View the complete source on GitHubflutter-concurrency
When your agent uses it
Use when dealing with asynchrony in Flutter - async/await inside a Cubit, Streams and RxDart, Isolates for heavy work, cancelling an in-flight operation, or choosing between FutureBuilder and BlocBuilder. Triggers on UI freezes, jank, race conditions, or "setState after dispose".
What it loads into context
Frontmatter
73 tokensAlways available to the agent
SKILL.md
2,827 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Decision Framework
- Pattern 1: Async in Cubits (default)
- Pattern 2: Stream Management with RxDart
- Pattern 3: Isolate.run() for One-Time Heavy Work
- Pattern 4: Isolate.spawn() for Continuous Background Work
- FutureBuilder vs BlocBuilder
- Cancellation
- Common Pitfalls
Files
SKILL.mdcore11,811 bytes
Read SKILL.md
You are implementing concurrency for a Flutter feature. Choose the pattern based on the skill argument, if one was given, or on the context of the operation.
## Decision Framework
Pick the right tool for the workload:
| Workload | Pattern | Examples |
|---|---|---|
| I/O (network, storage) | `async/await` | Dio API calls, SharedPreferences, Hive reads |
| CPU < 16 ms | `async/await` | Small list transforms, formatting |
| One-time heavy CPU | `Isolate.run()` | PDF receipt generation, large JSON parsing |
| Continuous background | `Isolate.spawn()` with ports | Payment status polling, data sync |
**Rule of thumb**: if it does NOT block the main isolate for more than one frame (~16 ms), use `async/await`. Otherwise, offload to an isolate.View the complete source on GitHubflutter-dart-style
When your agent uses it
Use when writing or reviewing any Dart or Flutter code for craft - naming, null safety, pattern matching, records, error handling idioms, dartdoc comments, logging, assertion style in tests, widget-level code quality (const, keys, dispose, BuildContext across an await), and analysis_options lint setup. Triggers on "clean this up", "is this idiomatic?", a code review of Dart, or a new file that sets a precedent others will copy.
What it loads into context
Frontmatter
103 tokensAlways available to the agent
SKILL.md
3,313 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- The first rule: let the tools own what the tools own
- Naming
- Null safety
- Pattern matching over a sealed status
- Error handling
- Members and constructors
- Type annotations
- Widget-level quality
- Documentation
- Logging
- Assertion style in tests
- Lint setup
- Review checklist
Files
SKILL.mdcore13,579 bytesSKILL.mdcore13,579 bytes
Read SKILL.md
You are writing or reviewing Dart for craft — the layer below architecture.
Where a project convention exists, it wins; this is what to do when there isn't
one, and what the analyzer will not tell you.
Related in this repo: **flutter-clean-arch** for layering, **flutter-testing**
for what to test, **flutter-concurrency** for isolates and streams,
**flutter-accessibility** for semantics, **flutter-theming** for colour and type.
Some topics below have a **canonical skill from the Dart team**
([dart-lang/skills](https://github.com/dart-lang/skills)) that goes deeper than
this file should. Where one exists it is named inline — install it and defer to
it. What stays here is the opinion: which convention this codebase picked, and
the traps the analyzer won't flag.
View the complete source on GitHubflutter-design-system
When your agent uses it
Use when creating or extending a Flutter design system package - design tokens, type scale, spacing, colour palette, or a new reusable component built from Figma tokens. Triggers on a request for a component shared across apps, or for visual standardisation.
What it loads into context
Frontmatter
59 tokensAlways available to the agent
SKILL.md
2,331 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When argument is "setup" or empty
- When argument is a component name
- Instructions
Files
SKILL.mdcore9,323 bytes
Read SKILL.md
You are working on a Flutter design system package - a `design_system/` package at the monorepo root, depended on by every app.
## When argument is "setup" or empty
Scaffold the complete design system package structure:
### Package Structure
```
design_system/
├── pubspec.yaml
└── lib/
├── design_system.dart ← Barrel export file
└── src/
├── tokens/View the complete source on GitHubflutter-di
When your agent uses it
Use when registering or resolving a dependency with flutter_injections - adding a registration to the core injections, assembling a feature FlutterModule, choosing between singleton/lazySingleton/factory, or calling FlutterInjections.get. Triggers on a runtime "dependency not registered" error.
What it loads into context
Frontmatter
61 tokensAlways available to the agent
SKILL.md
1,138 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- DI Architecture Overview
- Registration Lifetimes
- Step 1: Register in CoreInjections
- Step 2: Register controller in the Module
- Step 3: Resolve dependencies
- Patterns to Follow
- Event Bus DI
- Common Mistakes to Avoid
- Instructions
Files
SKILL.mdcore4,742 bytes
Read SKILL.md
You are configuring dependency injection for a Flutter feature using `flutter_injections`.
## DI Architecture Overview
```
FlutterInjectionsWidget (root, in AppWidget)
└── CoreInjections.core() ← global singletons (Dio, repos, session)
├── auth()
├── services()
├── eventBus()
└── ...
FlutterModule (per-module, lazy)
└── HomeModule.injections ← scoped to module lifetimeView the complete source on GitHubflutter-forms
When your agent uses it
Use when building a Flutter form or sign-up screen - field validation, wiring to a Cubit, input masks and pt-BR formatting (CPF, CNPJ, phone, postcode, currency, dates), or a multi-step form. Triggers on "registration screen", "validate this field" or "digits only".
What it loads into context
Frontmatter
72 tokensAlways available to the agent
SKILL.md
5,199 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Three Patterns by Use Case
- Form Architecture
- Pattern 1: Simple Form
- Pattern 2: Validated Form + Cubit Integration
- Pattern 3: Multi-Step Form (TabBarView)
- Reusable Validators
- Field Type Reference
- Form + Cubit Integration Rules
- Instructions
Files
SKILL.mdcore23,749 bytes
Read SKILL.md
You are implementing a form for a Flutter feature.
## Three Patterns by Use Case
Choose based on the skill argument, if one was given, or on the context of the feature:
- `simple` — basic form with minimal validation (settings toggle, quick input)
- `validated` — full validation, field-level errors, submit-to-Cubit flow (login, product creation)
- `multi-step` — form split across tabs or stepper (store config, onboarding)
---
## Form Architecture
View the complete source on GitHubflutter-monorepo
When your agent uses it
Use when setting up or extending a Melos-based Flutter monorepo - adding a new package, editing melos.yaml, fixing bootstrap, wiring a dependency between packages, or defining per-app environment variables. Triggers when creating a new Dart or Flutter package.
What it loads into context
Frontmatter
61 tokensAlways available to the agent
SKILL.md
1,598 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Monorepo Layout
- When argument is "setup"
- When argument is "add-package <name>"
- Environment Variables Pattern
- Instructions
Files
SKILL.mdcore5,587 bytesSKILL.mdcore5,587 bytesSKILL.mdcore5,587 bytes
Read SKILL.md
You are working with a Melos-based Flutter monorepo.
## Monorepo Layout
```
<project_root>/
├── melos.yaml <- Melos workspace config
├── pubspec.yaml <- Workspace root (required for Melos 4+)
├── Makefile <- Developer commands (setup, dev, build, test)
├── core/ <- Shared domain + data layer
│ ├── pubspec.yaml
│ └── lib/
│ ├── domain/
│ ├── data/View the complete source on GitHubflutter-new-module
When your agent uses it
Use when creating a new feature or module in a Flutter app (lib/modules/<feature>/) - generates the full skeleton: module with DI, Cubit controller, sealed status class, screen, widgets and route. Triggers on "new screen", "new feature" or "new module".
What it loads into context
Frontmatter
67 tokensAlways available to the agent
SKILL.md
2,029 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Input
- Module Structure to Create
- File Templates
- Instructions
Files
SKILL.mdcore8,475 bytes
Read SKILL.md
You are creating a complete feature module for a scalable Flutter project - Cubit for state, `flutter_injections` for DI, one folder per feature under `lib/modules/`.
## Input
- Module name: from the request, or from the skill argument (e.g., "payment", "order", "profile").
**If no name was given, ask before creating any file** — it drives every directory,
file and class name below, and renaming afterwards touches all of them.
- If a second argument is given, it's the package path (e.g., "../my_app/lib")
- If no path given, use the current package's `lib/` directory
## Module Structure to Create
Create ALL the following files for module `<module_name>`:
```View the complete source on GitHubflutter-run
When your agent uses it
Use when running, building, installing or debugging a Flutter app — picking a device or emulator, working with build flavors, passing --dart-define values, loading secrets into a build, or when the app won't start, opens blank, or can't reach the dev API. Covers the task-runner wrapper (Makefile/melos script) that keeps those flags consistent.
What it loads into context
Frontmatter
80 tokensAlways available to the agent
SKILL.md
1,375 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Put a task runner in front of `flutter`
- Configuration: `--dart-define`, and the file form
- Android flavors
- Device selection
- Quality commands
- Troubleshooting
- Rules
Files
SKILL.mdcore5,622 bytesSKILL.mdcore5,622 bytesSKILL.mdcore5,622 bytesSKILL.mdcore5,622 bytesSKILL.mdcore5,622 bytesSKILL.mdcore5,622 bytes
Read SKILL.md
You are running or building a Flutter app. The core idea of this skill: **a bare
`flutter run` is almost never the right command in a real project.** Flavors,
`--dart-define`s and the Flutter version all have to line up, and remembering
them by hand is where the lost afternoons come from.
## Put a task runner in front of `flutter`
Make the repo's `Makefile` (or melos script, or `just` file) the source of truth
for how each app is launched, and run *that*. It is the only way the flags stay
consistent between your machine, a teammate's, and CI.
A shape that works for a multi-app monorepo:
```bashView the complete source on GitHubflutter-state
When your agent uses it
Use when implementing or reviewing Flutter state management with Cubit - a sealed status class with variants, BlocBuilder with pattern matching, a Cubit fed by a Stream for realtime data, or an event bus for cross-module communication. Triggers when a screen has to react to data that changes.
What it loads into context
Frontmatter
65 tokensAlways available to the agent
SKILL.md
1,433 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Three Patterns by Use Case
- Pattern 1: Simple Cubit (default)
- Pattern 2: Stream Cubit (real-time)
- Pattern 3: Event Bus (cross-module)
- Status State Design Rules
- Controller Rules
- Instructions
Files
SKILL.mdcore6,037 bytes
Read SKILL.md
You are implementing state management for a Flutter feature using Cubit + RxDart.
## Three Patterns by Use Case
Choose based on the skill argument, if one was given, or on the context of the feature:
- `simple` — basic async operations (load data, submit form)
- `stream` — real-time data via RxDart BehaviorSubject
- `event-bus` — cross-module communication via Broker
---
## Pattern 1: Simple Cubit (default)
View the complete source on GitHubflutter-store-cd
When your agent uses it
Use when setting up or debugging continuous delivery of a Flutter app to the App Store and Google Play with GitHub Actions - a tag that builds and uploads both apps, Android upload-keystore signing, iOS manual signing with a certificate and provisioning profile on a macOS runner, App Store Connect API keys, Play service accounts, build numbers, or when a store upload or CI build fails (draft app errors, SDK version 409, altool timeouts, codesign hangs, pods refusing a profile). Also covers the first-release traps around the pipeline - first manual Play upload, Play App Signing fingerprints for Firebase and App Check, and submitting the first subscriptions.
What it loads into context
Frontmatter
141 tokensAlways available to the agent
SKILL.md
2,903 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- The release flow
- Build numbers: let CI own them
- Secrets vs variables
- Android
- iOS
- First submission: traps the pipeline can't catch
Files
SKILL.mdcore12,165 bytesSKILL.mdcore12,165 bytesSKILL.mdcore12,165 bytestemplates/android-play.ymlasset5,015 bytestemplates/ios-testflight.ymlasset7,186 bytes
Read SKILL.md
You are setting up, or fixing, the pipeline that takes a Flutter app from a git
tag to TestFlight and Google Play. The design in one line: **push a `v*` tag,
two independent workflows build, sign and upload each platform; nothing else
triggers a store build.**
Two ready workflows sit next to this file, written in full from a production app.
Copy them to `.github/workflows/`, then set the `env:` block at the top of each:
- [`templates/android-play.yml`](templates/android-play.yml): ubuntu, signs an
App Bundle, uploads it to Play
- [`templates/ios-testflight.yml`](templates/ios-testflight.yml): macOS, archives
and signs an IPA, uploads it to TestFlight
The rest of this skill is the reasoning behind them and the traps each lineView the complete source on GitHubflutter-testing
When your agent uses it
Use when writing or fixing Dart/Flutter tests — unit tests for use cases and repositories, widget tests, mocking with mocktail, bloc_test for Cubits, E2E flows with Maestro, or deciding where a test file belongs. Also triggers on a coverage request, "write the test for this", or a failing test.
What it loads into context
Frontmatter
73 tokensAlways available to the agent
SKILL.md
3,798 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Test Pyramid
- Mocking Strategy
- Unit Tests
- Widget Tests
- E2E Tests (Maestro)
- Test File Organization
- Required Dependencies
- What to Test per Layer
- Test Naming Convention
- Instructions
Files
SKILL.mdcore15,591 bytesSKILL.mdcore15,591 bytes
Read SKILL.md
You are implementing tests for a Flutter feature.
## Test Pyramid
```
┌─────────────────────┐
│ E2E (Maestro) │ Few — critical user flows only
│ Real device/emu │
├─────────────────────┤
│ Widget Tests │ Medium — one per screen/widget
│ WidgetTester │
├─────────────────────┤
│ Unit Tests │ Many — usecases, repos, models,
│ Pure Dart │ controllers, extensionsView the complete source on GitHubflutter-theming
When your agent uses it
Use when creating, migrating or auditing a Material 3 theme in a Flutter app - assembling ColorScheme and ThemeData, theming a specific component, replacing a hardcoded colour with a theme token, or reviewing visual consistency. Triggers on any mention of colour, theme, dark mode, or "this looks off-brand" on a Flutter screen.
What it loads into context
Frontmatter
79 tokensAlways available to the agent
SKILL.md
3,007 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Workflow: create
- Workflow: migrate
- Workflow: audit
- Instructions
Files
SKILL.mdcore12,738 bytes
Read SKILL.md
You are working on theming for a Flutter app. The patterns below assume a shared `design_system/` package holding cross-app tokens (`DSColors`, `DSSpacing`, `DSRadius`, `DSTypography`), with each app free to keep its own `lib/theme/` for app-specific overrides.
Always prefer importing a token from the design system over duplicating the value in an app.
---
## Workflow: create
Scaffold a complete theme for the target app, taken
from the request or the skill argument. **If it is not clear which app, ask before writing
anything:** each one has its own theme directory and overwriting the wrong app is silent.
### Theme Directory Structure
View the complete source on GitHubflutter-web
When your agent uses it
Use when working on a Flutter web build - code touching dart:js_interop, package:web or dart:ui_web; tests that will not compile on the VM runner; a blank white page after a build; or QA of a running web app in a browser. Triggers on "works on mobile but not on web", a suite that breaks after a web import is added, or a screen that looks frozen in the browser.
What it loads into context
Frontmatter
94 tokensAlways available to the agent
SKILL.md
1,719 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Browser QA only counts in a visible tab
- Browser-layer code needs the Chrome test runner
- Blank white page after changing a path dependency
- Watch the import chain, not just the import
- Checklist before shipping a web change
- Common mistakes
Files
SKILL.mdcore7,503 bytesSKILL.mdcore7,503 bytesSKILL.mdcore7,503 bytesSKILL.mdcore7,503 bytes
Read SKILL.md
You are working on a Flutter **web** build. Everything here is a lesson that
cost real hours — each one looks like an application bug and is not.
## Browser QA only counts in a visible tab
Flutter web drives its **entire** frame pipeline from `requestAnimationFrame`,
and Chrome throttles rAF to near zero in a tab that is not the active one. In a
background tab the app still runs — events are processed, network calls fire —
but it barely paints. So route transitions appear frozen for tens of seconds,
and click coordinates read off a screenshot land nowhere, because the painted
frame no longer matches the real hit-test layout.
That looks exactly like two bugs that do not exist: a slow splash screen and
broken Tab traversal.View the complete source on GitHubSkills included
- flutter-accessibility
- flutter-caching
- flutter-clean-arch
- flutter-concurrency
- flutter-dart-style
- flutter-design-system
- flutter-di
- flutter-forms
- flutter-monorepo
- flutter-new-module
- flutter-run
- flutter-state
- flutter-store-cd
- flutter-testing
- flutter-theming
- flutter-web
Repository facts
- License
- MIT
- Created
- Sep 17, 2026
- Last pushed
- Oct 30, 2026
- Forks
- 4
- Open issues
- 0
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 6, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 15 notes
skills/flutter-accessibility/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/flutter-dart-style/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/flutter-monorepo/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/flutter-monorepo/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/flutter-run/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/flutter-run/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/flutter-run/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/flutter-run/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/flutter-run/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/flutter-store-cd/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/flutter-store-cd/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/flutter-testing/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/flutter-web/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/flutter-web/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/flutter-web/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- 6 dangerous shell commandsin 4 files: flutter-store-cd/templates/ios-testflight.yml:92 flutter-web/SKILL.md:106 flutter-run/SKILL.md:111 and 1 more
- 15 network referencesin 6 files: flutter-concurrency/SKILL.md:326 flutter-store-cd/templates/ios-testflight.yml:111 flutter-accessibility/SKILL.md:416 and 3 more
- No hidden or obfuscated text
- No instruction overrides
- No executable scripts
- 16 references to secretsin 4 files: flutter-store-cd/templates/ios-testflight.yml:80 flutter-monorepo/SKILL.md:216 flutter-run/SKILL.md:21 and 1 more
- No requests to vote in Hot
Show all 37 signals by file
skills/flutter-accessibility/SKILL.md
- Network accessline 416
# Run Lighthouse CI from command line npx lighthouse http://localhost:PORT --only-categories=accessibility --output=json --output-path=./a11y-report.json - Network accessline 417
npx lighthouse http://localhost:PORT --only-categories=accessibility --output=json --output-path=./a11y-report.json
skills/flutter-concurrency/SKILL.md
- Network accessline 326
Future<void> load() async { emit(const Loading()); final data = await _repo.fetch(); - Network accessline 327
emit(const Loading()); final data = await _repo.fetch(); emit(Success(data)); // 💥 if navigated away - Network accessline 328
final data = await _repo.fetch(); - Network accessline 333
Future<void> load() async { emit(const Loading()); final data = await _repo.fetch(); - Network accessline 334
emit(const Loading()); final data = await _repo.fetch(); if (isClosed) return; - Network accessline 335
final data = await _repo.fetch();
skills/flutter-dart-style/SKILL.md
skills/flutter-monorepo/SKILL.md
skills/flutter-run/SKILL.md
skills/flutter-store-cd/SKILL.md
skills/flutter-store-cd/templates/ios-testflight.yml
- Access to secretsline 80
[Credential-related source omitted] - Access to secretsline 81
[Credential-related source omitted] - Access to secretsline 82
[Credential-related source omitted] - Access to secretsline 84
[Credential-related source omitted] - Access to secretsline 85
[Credential-related source omitted] - Access to secretsline 86
[Credential-related source omitted] - Access to secretsline 90
[Credential-related source omitted] - Dangerous shell operationline 92
rm -f "$RUNNER_TEMP/cert.p12" - Access to secretsline 97
[Credential-related source omitted] - Access to secretsline 99
[Credential-related source omitted] - Network accessline 111
cat > "$RUNNER_TEMP/ExportOptions.plist" <<PLIST <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> - Network accessline 112
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> - Network accessline 113
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> - Dangerous shell operationline 167
trap 'rm -f "$KEY_FILE"' EXIT - Access to secretsline 168
[Credential-related source omitted]
skills/flutter-testing/SKILL.md
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Signal confidence: 22 facts
- Network access in code of the SKILL.mdflutter-accessibility/SKILL.md:416High confidence
- Network access in code of the SKILL.mdflutter-accessibility/SKILL.md:417High confidence
- Network access in code of the SKILL.mdflutter-concurrency/SKILL.md:326High confidence
- Network access in code of the SKILL.mdflutter-concurrency/SKILL.md:327High confidence
- Network access in code of the SKILL.mdflutter-concurrency/SKILL.md:328High confidence
- Network access in code of the SKILL.mdflutter-concurrency/SKILL.md:333High confidence
- Network access in code of the SKILL.mdflutter-concurrency/SKILL.md:334High confidence
- Network access in code of the SKILL.mdflutter-concurrency/SKILL.md:335High confidence
- Network access in prose of the SKILL.mdflutter-dart-style/SKILL.md:14Low confidence
- Network access in prose of the SKILL.mdflutter-dart-style/SKILL.md:15Low confidence
- Network access in code of the SKILL.mdflutter-monorepo/SKILL.md:215High confidence
- Access to secrets in code of the SKILL.mdflutter-monorepo/SKILL.md:216High confidence
- Access to secrets in code of the SKILL.md: a variable, placeholder or call, not a stored valueflutter-monorepo/SKILL.md:223Low confidence
- Access to secrets in code of the SKILL.md: a variable, placeholder or call, not a stored valueflutter-run/SKILL.md:21Low confidence
- Access to secrets in code of the SKILL.md: a variable, placeholder or call, not a stored valueflutter-run/SKILL.md:40Low confidence
- Dangerous shell operation in prose of the SKILL.mdflutter-run/SKILL.md:111Low confidence
- Access to secrets in prose of the SKILL.mdflutter-store-cd/SKILL.md:188Low confidence
- Access to secrets in prose of the SKILL.mdflutter-store-cd/SKILL.md:198Low confidence
- Dangerous shell operation in prose of the SKILL.mdflutter-testing/SKILL.md:378Low confidence
- Network access in prose of the SKILL.mdflutter-testing/SKILL.md:378Low confidence
- Dangerous shell operation in code of the SKILL.mdflutter-web/SKILL.md:106High confidence
- Dangerous shell operation in code of the SKILL.mdflutter-web/SKILL.md:155High confidence
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Compatible | Standard SKILL.md skills/flutter-accessibility/SKILL.md | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md skills/flutter-accessibility/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md skills/flutter-accessibility/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md skills/flutter-accessibility/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md skills/flutter-accessibility/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md skills/flutter-accessibility/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.