domains / software-engineering / flutter-development / flutter-expert
The Jeffallan copy is a concrete, actionable procedure with a specific workflow (Setup -> State -> Widgets -> Test -> Optimize), code examples, and troubleshooting steps. The other two copies (rmyndharis and sickn33) are nearly identical broad capability lists that describe what a Flutter expert knows (Impeller, FFI, CQRS, etc.) but lack a specific execution workflow. They disagree on scope: Jeffallan focuses on a specific implementation loop with Riverpod/GoRouter, while the others cover a much wider range of state management libraries and platform integrations without a defined process. Combining them captures both the specific workflow and the broader capability context.
| Repository | Path |
|---|---|
| Jeffallan/claude-skills | skills/flutter-expert/SKILL.md |
| rmyndharis/antigravity-skills | skills/flutter-expert/SKILL.md |
| sickn33/agentic-awesome-skills | plugins/agentic-awesome-skills-claude/skills/flutter-expert/SKILL.md |
| Role | Repository | Path |
|---|---|---|
| peer | Jeffallan/claude-skills | skills/flutter-expert/SKILL.md |
| peer | rmyndharis/antigravity-skills | skills/flutter-expert/SKILL.md |
| peer | sickn33/agentic-awesome-skills | plugins/agentic-awesome-skills-claude/skills/flutter-expert/SKILL.md |
| adapter | sickn33/agentic-awesome-skills | plugins/agentic-awesome-skills/skills/flutter-expert/SKILL.md |
| adapter | sickn33/agentic-awesome-skills | plugins/agentic-bundle-aas-mobile-app-builder/skills/flutter-expert/SKILL.md |
| adapter | sickn33/agentic-awesome-skills | skills/flutter-expert/SKILL.md |
--- name: flutter-expert description: Use when building cross-platform applications with Flutter 3+ and Dart. Invoke for widget development, state management, navigation, platform-specific implementations, and performance optimization. --- # Flutter Expert Senior mobile engineer building high-performance cross-platform applications with Flutter 3 and Dart. ## Core Workflow 1. **Setup** — Scaffold project, add dependencies (`flutter pub get`), configure routing. 2. **State** — Define state management (Riverpod, Bloc, etc.); verify with `flutter analyze`. - If `flutter analyze` reports issues: fix all lints and warnings before proceeding. 3. **Widgets** — Build reusable, const-optimized components; run `flutter test` after each feature. - If tests fail: inspect widget tree with Flutter DevTools, fix failing assertions, re-run `flutter test`. 4. **Test** — Write widget and integration tests; confirm with `flutter test --coverage`. - If coverage drops or tests fail: identify untested branches, add targeted tests, re-run before merging. 5. **Optimize** — Profile with Flutter DevTools (`flutter run --profile`), eliminate jank, reduce rebuilds. - If jank persists: check rebuild counts, isolate expensive `build()` calls, apply `const` or move state closer to consumers. ## Capabilities & Scope - **State Management**: Riverpod 2.x, Bloc/Cubit, GetX, Provider, Stacked, MobX, Redux. - **Architecture**: Clean Architecture, MVVM, Repository Pattern, Dependency Injection. - **Platform Integration**: iOS (Swift), Android (Kotlin), Web (PWA), Desktop, Embedded. - **Performance**: Impeller optimization, const constructors, Isolate usage, Slivers for lists. - **Testing**: Unit, Widget, Integration (Patrol), Golden files, Accessibility. ## Constraints ### MUST DO - Use `const` constructors wherever possible. - Implement proper keys for lists. - Use scoped state consumers (e.g., `ConsumerWidget`) for state. - Profile with DevTools and fix jank. ### MUST NOT DO - Build widgets inside `build()` method. - Mutate state directly (always create new instances). - Use `setState` for app-wide state. - Block UI thread with heavy computation (use `compute()` or Isolates). ## Troubleshooting | Symptom | Recovery | |---------|----------| | `flutter analyze` errors | Fix flagged lines; run `flutter pub get` if imports are missing. | | Widget test failures | Use `tester.pumpAndSettle()` after state changes; verify finders. | | Jank / dropped frames | Use `RepaintBoundary`, move heavy work to `compute()`, add `const`. |