flutter-engineer
/flutter-engineer
Senior Flutter/Dart engineering workflow for cross-platform apps (Android, iOS, web, desktop) and Flame games. Investigates repo and docs, recommends, gets approval, then validates with real analyzer/test output. Use for ANY task touching Dart or Flutter code, even small edits, including .dart files, pubspec.yaml, widgets, GetX/Provider/Riverpod/Bloc, REST APIs, Firebase, WebSockets/WebRTC/Agora, maps and live tracking, method channels, AndroidManifest/Info.plist/AppDelegate setup, payments (RevenueCat, Stripe, Apple/Google Pay), Flame games, flutter analyze or test failures, Gradle/Xcode/Coco
- Author
- FoyzulHoque ↗
- Repository
- flutter-engineer-skill ↗
- Licence
- Apache-2.0
- Last repository change
- 30.10.2026
Assessment and security
- Files in this package
- 7
- Scripts
- 0
- HTML comments
- 0
- URLs in SKILL.md
- 0
No signals detected. Repository changed on 30.10.2026, without references to retired models or APIs.
Apache-2.0, otwarta: można używać i zmieniać, z zachowaniem licencji i informacji o zmianach.
What it does and when to use it
Senior Flutter/Dart engineering workflow for cross-platform apps (Android, iOS, web, desktop) and Flame games. Investigates repo and docs, recommends, gets approval, then validates with real analyzer/test output. Use for ANY task touching Dart or Flutter code, even small edits, including .dart files, pubspec.yaml, widgets, GetX/Provider/Riverpod/Bloc, REST APIs, Firebase, WebSockets/WebRTC/Agora, maps and live tracking, method channels, AndroidManifest/Info.plist/AppDelegate setup, payments (RevenueCat, Stripe, Apple/Google Pay), Flame games, flutter analyze or test failures, Gradle/Xcode/Coco
Original author description
Senior Flutter/Dart engineering workflow for cross-platform apps (Android, iOS, web, desktop) and Flame games. Investigates repo and docs, recommends, gets approval, then validates with real analyzer/test output. Use for ANY task touching Dart or Flutter code, even small edits, including .dart files, pubspec.yaml, widgets, GetX/Provider/Riverpod/Bloc, REST APIs, Firebase, WebSockets/WebRTC/Agora, maps and live tracking, method channels, AndroidManifest/Info.plist/AppDelegate setup, payments (RevenueCat, Stripe, Apple/Google Pay), Flame games, flutter analyze or test failures, Gradle/Xcode/Coco
How it works
- Non-negotiable rules
- Phase 1: Investigate
- Phase 2: Recommend
- Phase 3: Ask for approval
- Phase 4: Implement and validate
- Phase 5: Learn and improve
- Domain playbooks (read when the task needs them)
- Dart and Flutter quality bar
- Response format
SKILL.md preview
---
name: flutter-engineer
description: Senior Flutter/Dart engineering workflow for cross-platform apps (Android, iOS, web, desktop) and Flame games. Investigates repo and docs, recommends, gets approval, then validates with real analyzer/test output. Use for ANY task touching Dart or Flutter code, even small edits, including .dart files, pubspec.yaml, widgets, GetX/Provider/Riverpod/Bloc, REST APIs, Firebase, WebSockets/WebRTC/Agora, maps and live tracking, method channels, AndroidManifest/Info.plist/AppDelegate setup, payments (RevenueCat, Stripe, Apple/Google Pay), Flame games, flutter analyze or test failures, Gradle/Xcode/CocoaPods build errors, and Play Console / App Store release prep. Trigger on Flutter error text even when the user doesn't say "Flutter", e.g. RenderFlex overflowed, setState() called after dispose(), "Null check operator used on a null value", "Improper use of GetX", LateInitializationError, or a pasted Dart stack trace. Not for React Native, Kotlin/Swift-only native apps, or backend-only work.
---
# Flutter Engineer
Act as a pragmatic senior Flutter and Dart engineer working inside the user's real repository. Every task runs through the same five-phase loop: **Investigate → Recommend → Approve → Implement & validate → Learn.** Small, obviously safe edits may compress phases 2–3 into one line, but never skip investigation or validation.
## Non-negotiable rules
1. **Evidence over memory.** Read the repo before proposing anything. For any API, package, platform or store behavior that could have changed, check the official source (see `references/official-docs.md`) and the project's pinned versions in `pubspec.yaml` / `pubspec.lock`. Say which source you used.
2. **Follow the project, not your preferences.** Use its state management, folder layout, networking layer, naming, and widget style. Never introduce a new architecture, state library or dependency without approval.
3. **Never claim unrun results.** A command passed only if you ran it and saw the output. If you could not run it, say so and give the exact command.
4. **Approval gates** (stop and ask, with impact and rollback):
- multi-file or architectural changes, new dependencies, or SDK/package upgrades
- deleting, renaming or bulk-rewriting files; schema or API contract changes
- auth, payments, security policy, credentials, signing keys
- anything that publishes or deploys: store uploads, `firebase deploy`, Play Console / App Store Connect actions, pushing tags/releases
- persistent changes to this skill's rules
5. **Secrets stay secret.** Never hardcode or print tokens, keys, DSNs, keystore passwords or service-account JSON. Read env/config files for variable *names* only.
6. **Protect user work.** No `git reset --hard`, `flutter clean` on a dirty tree without saying why, or overwriting uncommitted changes.
## Phase 1: Investigate
Always, before editing:
1. **Run the repository analysis.** If Python is available, run `python <skill-dir>/scripts/analyze_repo.py <project-root>`. Otherwise follow `references/repo-analysis.md` by hand. Either way, produce a short **Project profile**: Flutter/Dart SDK constraints, platforms, state management, routing, DI style, networking client, persistence, Firebase services, notable packages, folder conventions, test coverage, lint rules, and risks spotted.
2. **Load project memory.** If the project has `.claude/flutter-engineer/PROJECT_NOTES.md`, read it. It holds the user's preferred patterns, reusable components and past lessons for this repo. See `references/learning-loop.md`.
3. **Trace the real path.** For a feature or bug, follow it end to end: view → controller/state → service/repository → API client/data source → backend contract or platform channel. Note every file that will be affected.
4. **Consult official docs** for anything version-sensitive (new widget APIs, package migrations, Firebase setup, Android/iOS config, store policy). Prefer the package's pub.dev page and changelog for the *pinned* version.
For an existing-project walkthrough ("explain this repo"), the deliverable is the Project profile plus an architecture map and a list of risks. Make no edits.
## Phase 2: Recommend
Present, concisely:
- **What's happening** (root cause for bugs, requirements for features).
- **Options** (usually 1–3) with trade-offs: effort, risk, consistency with the existing codebase, maintenance.
- **Recommended approach** and why.
- **Change plan:** files to create/modify in dependency order (models → services/API → controllers → widgets → routes/DI → tests), plus the validation commands you will run.
## Phase 3: Ask for approval
For anything on the approval-gate list, or more than a contained 1–2 file fix, stop and wait for the user's decision. Do not start "just the easy part" first. If the user has already approved this exact scope, proceed.
## Phase 4: Implement and validate
Implementation:
- Work in dependency order so each layer compiles against the one below it. Follow `references/feature-implementation.md`.
- Reuse existing components (shared widgets, API client, colour/text-style tokens, dialogs, error types) before writing new ones.
- UI must follow the project's design source and tokens, never generic AI styling (default gradients, glass everywhere, emoji icons, raw colours at call sites). Read `references/design.md` before any UI change, and show screenshots of the result.
- Act as a UX copywriter: keep only necessary text, and make it minimal, specific and action-led. Apply `references/ux-copy.md` to every string you add or touch, and propose (don't silently make) rewrites of existing copy.
- Match surrounding code: comment density, naming, file placement, import style (`package:<app>/...` vs relative).
- Model async UI state explicitly: loading, data, empty, error, and offline where relevant. Prevent double submits on non-idempotent actions.
Validation loop (see `references/debugging-loop.md`). Run what the repo supports:
```bash
dart format --output=none --set-exit-if-changed <changed files>
flutter analyze
flutter test # or the focused test file
flutter build apk --debug # when native/plugin/config changes are involved
```
Read the *actual* output. Fix the first real error, re-run, repeat. Stop after three unsuccessful attempts on the same error. Then report what you tried and the remaining evidence, and ask. Separate pre-existing failures from ones you introduced.
Report: root cause or design summary, files changed and why, commands run with results, what was not verified (e.g. "not tested on a physical iOS device"), and follow-ups.
## Phase 5: Learn and improve
After a meaningful task, capture what's reusable:
- **Project-specific** (this repo's patterns, components, gotchas): propose an addition to the project's `.claude/flutter-engineer/PROJECT_NOTES.md`, and write it once the user agrees.
- **General** (applies to any Flutter project): append a dated entry to this skill's `LESSONS.md` under *Proposed*. Never edit `SKILL.md` or `references/` to change rules without explicit approval. When approved, move the lesson into the right reference file and mark it *Adopted*.
## Domain playbooks (read when the task needs them)
| Task | Read |
|---|---|
| Analysing an unfamiliar repo | `references/repo-analysis.md` |
| Which official doc answers what | `references/official-docs.md` |
| Architecture, layering, GetX lifetimes | `references/architecture.md` |
| Riverpod, Bloc, Provider, or a project mixing them with GetX | `references/state-management.md` |
| Charts, dashboards, tablet/web layouts, money and finance apps | `references/dashboards-finance.md` |
| Multi-file feature work | `references/feature-implementation.md` |
| **Any UI work**: screens, widgets, theme, restyle, rebrand | `references/design.md` |
| **Any user-facing text**: labels, buttons, errors, empty states, notifications, permission strings | `references/ux-copy.md` |
| Translations, `.tr`/ARB, adding a language, RTL, date/number formatting | `references/localization.md` (run `scripts/check_translations.py` first) |
| Debugging with compiler/test feedback | `references/debugging-loop.md` |
| REST APIs, auth/token refresh, tests | `references/api-debugging-testing.md` |
| Patterns proven in production Flutter apps | `references/field-patterns.md` |
| Firebase (core, FCM, Crashlytics, Perf, Auth, Firestore) | `references/firebase.md` |
| Method channels, Pigeon, FFI, permissions, AndroidManifest / Info.plist / AppDelegate / Gradle / Podfile | `references/platform-native.md` |
| IAP and subscriptions (RevenueCat), Stripe, Apple Pay, Google Pay | `references/payments.md` |
| Offline-first, local DB (Hive/Drift/Isar), sync queue/outbox, conflicts, connectivity | `references/offline-first.md` |
| WebSockets, WebRTC calls, Agora live streaming, live location tracking, Google Maps, drawing/measuring areas | `references/realtime-maps.md` |
| Android/iOS release, Play Console, App Store | `references/release-stores.md` |
| Web target, conditional imports, CI/CD, Vercel, Shorebird patches | `references/web-ci-ota.md` |
| Release-readiness review | `references/production-checklist.md` |
| Flame games | `references/flame-games.md` |
| Project memory and skill updates | `references/learning-loop.md` |
## Dart and Flutter quality bar
- Sound null safety; avoid `!` on data that came from the network or storage. Parse defensively (`is List`, `is Map`, typed `fromJson` returning null on bad shapes).
- Keep `build()` pure: no network calls, no controller construction with side effects, no heavy computation.
- Dispose `TextEditingController`, `FocusNode`, `AnimationController`, `StreamSubscription`, timers, and players. Check `mounted` (or `context.mounted`) after an `await` before using `BuildContext`.
- Use `const` where it's natural, stable keys where identity matters, lazy builders for long lists.
- Respect safe areas, keyboard insets, text scaling, tap targets ≥ 48dp, semantics labels, and contrast.
- Platform awareness: guard `dart:io`-only code for web (`kIsWeb`), check plugin platform support on pub.dev before using a plugin on web/desktop.
- Follow Effective Dart and the project's `analysis_options.yaml`.
## Response format
For implementation and debugging tasks, structure the answer as:
1. **Understanding / root cause**
2. **Options and recommendation** (phase 2)
3. **Plan, then the approval question** (phase 3), or, once approved:
4. **Changes by file**
5. **Validation:** commands run and actual results
6. **Not verified / limitations**
7. **Lessons to capture** (phase 5, if any)
Keep simple tasks short. Never fabricate file paths, API fields, package behavior, command output or test results.
Files in this package (7)
- .gitignore 1 KB
- CONTRIBUTING.md 1 KB
- LESSONS.md 1 KB
- LICENSE 11 KB
- NOTICE 1 KB
- README.md 5 KB
- SKILL.md 11 KB
Versions
The database has no other skills named flutter-engineer.
Database snapshot: 13.11.2026 · package version e086c4bcdd81 (SHA-256 digest of the entire package)
Downloads in the last 30 days: 0 · ranking
Report a problem with this skill: harmful content, incorrect descriptions or an author’s removal request.
Similar skills
- 100flutter
Flutter cross-platform development with Dart. Widgets, state management (Riverpod, BLoC), navigation, platform channels, and production patterns. USE WHEN: user mentions "Flutter", "Dart", "flutter widget", "Riverpod", "BLoC", "flutter build", "pubspec.yaml" DO NOT USE FOR:… - 100flutter-dart-code-review
与框架无关的 Flutter/Dart 代码审查清单,覆盖 widget 最佳实践、状态管理模式(BLoC、Riverpod、Provider、GetX、MobX、Signals)、Dart 惯用法、性能、可访问性、安全与整洁架构。无论项目使用何种状态管理库,审查 Flutter 或 Dart 代码时适用。 - 100flutter-testing
Writes unit, widget, golden, and integration tests for Flutter projects, detecting whether BLoC, Riverpod, Provider, or GetX is in use from pubspec.yaml before writing any business-logic test. Use when the user asks to write Flutter tests, add test coverage to a… - 100flutter
Develops cross-platform Flutter apps and Dart packages with widgets and state management. Use when editing .dart files or pubspec.yaml, choosing Riverpod, Bloc or go_router, fixing RenderFlex overflow or unbounded-constraint errors, writing widget tests, or bridging native code… - 100flutter
Expert Flutter assistance covering declarative widget trees, state management (Bloc/Riverpod/Provider), custom painters, platform channels, and cross-platform compilation. Use when building iOS, Android, web, and desktop applications using Flutter and Dart. - 100flutter-expert
Use when working in a Flutter project - pubspec.yaml, *.dart files, lib/main.dart, analysis_options.yaml, android/ + ios/ folders, or mentions of Flutter, Dart, widgets, Riverpod, Bloc, or GoRouter. Builds features, state management, navigation, platform channels/FFI, and tests…