Skip to content
Skills Library
Programming · Building & coding

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

Licence
Apache-2.0
Last repository change
30.10.2026

Assessment and security

95/ 100Class: good
Format20 / 25
Frontmatter with name and description, valid name, description up to 1,024 characters, name matching the folder.
Discoverability25 / 25
Description explains when to use the skill, has a reasonable length and uses third person.
Content35 / 35
At least 150 words and at most 500 lines, headings, step lists, examples or code.
Hygiene15 / 15
No placeholders such as TODO, no Windows paths, with a licence.
Riskno signals detected in the scan
Files in this package
7
Scripts
0
HTML comments
0
URLs in SKILL.md
0
Deprecation

No signals detected. Repository changed on 30.10.2026, without references to retired models or APIs.

Licence

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

  1. Non-negotiable rules
  2. Phase 1: Investigate
  3. Phase 2: Recommend
  4. Phase 3: Ask for approval
  5. Phase 4: Implement and validate
  6. Phase 5: Learn and improve
  7. Domain playbooks (read when the task needs them)
  8. Dart and Flutter quality bar
  9. Response format
Original SKILL.md headings · 119 lines, 1,336 words
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…

Feedback and reports

Your message goes to Bartosz Sokoliński. An email address is needed only for a reply. See the privacy policy.