domains / software-engineering / flutter-development / flutter-expert

flutter-expert

Skill card

combined

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.

Repositories

RepositoryPath
Jeffallan/claude-skillsskills/flutter-expert/SKILL.md
rmyndharis/antigravity-skillsskills/flutter-expert/SKILL.md
sickn33/agentic-awesome-skillsplugins/agentic-awesome-skills-claude/skills/flutter-expert/SKILL.md

Other copies

RoleRepositoryPath
peerJeffallan/claude-skillsskills/flutter-expert/SKILL.md
peerrmyndharis/antigravity-skillsskills/flutter-expert/SKILL.md
peersickn33/agentic-awesome-skillsplugins/agentic-awesome-skills-claude/skills/flutter-expert/SKILL.md
adaptersickn33/agentic-awesome-skillsplugins/agentic-awesome-skills/skills/flutter-expert/SKILL.md
adaptersickn33/agentic-awesome-skillsplugins/agentic-bundle-aas-mobile-app-builder/skills/flutter-expert/SKILL.md
adaptersickn33/agentic-awesome-skillsskills/flutter-expert/SKILL.md

Combined skill

---
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`. |