flutter-expert — Claude Code skill: Flutter & Dart
Skill for building cross-platform apps with Flutter 3+ and Dart. Covers widgets, state management via Riverpod or Bloc, GoRouter navigation, and performance optimization.
npx skills add Jeffallan/claude-skills --skill flutter-expert -a claude-codeWhat flutter-expert does
flutter-expert guides you through the complete Flutter development cycle: project setup, dependency management, state definition, widget building, testing, and performance profiling. It handles Riverpod providers and Bloc/Cubit classes, const-optimized components, GoRouter configuration, and platform-specific implementations.
The skill follows a structured workflow with checkpoints at each stage. Start by scaffolding the project and configuring routing. Define state with flutter analyze to catch issues early. Build reusable widgets, then run flutter test after each feature. For performance, profile in --profile mode and eliminate jank using DevTools. If flutter analyze reports errors, fix them before proceeding; if widget tests fail, DevTools shows you the tree mismatch and async state issues.
Works on Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, and OpenCode. Requires Flutter 3+, Dart, and terminal access for flutter pub get, flutter test, and flutter run --profile.
What it helps with
- Set up Riverpod or Bloc state management in a Flutter project
- Build reusable widgets with const optimization
- Configure navigation and routes with GoRouter
- Profile and eliminate jank or frame drops
- Write widget and integration tests
Example prompts for the agent
- Add a Riverpod provider for a counter and convert my StatefulWidget to ConsumerWidget
- How do I set up GoRouter with named routes for deep linking?
- Profile my widget with Flutter DevTools and tell me why frames are dropping
How to install flutter-expert
1Skills CLI (Vercel)
npx skills add Jeffallan/claude-skills --skill flutter-expert -a claude-code2Manually: put the files in place
~/.claude/skills/flutter-expert/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/flutter-expert/
1Skills CLI (Vercel)
npx skills add Jeffallan/claude-skills --skill flutter-expert -a codex2Manually: put the files in place
.agents/skills/flutter-expert/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add Jeffallan/claude-skills --skill flutter-expert -a cursor2Manually: put the files in place
.cursor/skills/flutter-expert/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install Jeffallan/claude-skills flutter-expert2Manually: put the files in place
.github/skills/flutter-expert/SKILL.md1Skills CLI (Vercel)
npx skills add Jeffallan/claude-skills --skill flutter-expert -a gemini-cli2Platform CLI
gemini skills install https://github.com/Jeffallan/claude-skills --path skills/flutter-expertManually: put the files in place
.devin/skills/flutter-expert/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add Jeffallan/claude-skills --skill flutter-expert -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
From the same set5
The whole set →Similar
Questions about flutter-expert
How do I install flutter-expert in Claude Code?
Run npx skills add Jeffallan/claude-skills --skill flutter-expert -a claude-code, then verify the SKILL.md file is loaded into ~/.claude/skills/flutter-expert/.
What does flutter-expert do?
The skill walks you through the full Flutter development workflow: project setup, state management with Riverpod or Bloc, widget building, testing with flutter test, and performance profiling with DevTools. It enforces best practices like const optimization and proper keys for lists.
What Flutter versions does flutter-expert support?
flutter-expert targets Flutter 3+. It uses modern patterns: Riverpod with Notifier, ConsumerWidget over StatefulWidget, and const constructors for performance.
Source text
SKILL.md · MIT
---
name: flutter-expert
description: Use when building cross-platform applications with Flutter 3+ and Dart. Invoke for widget development, Riverpod/Bloc state management, GoRouter navigation, platform-specific implementations, performance optimization.
license: MIT
metadata:
author: https://github.com/Jeffallan
company: https://synergetic.solutions
version: "1.1.0"
domain: frontend
triggers: Flutter, Dart, widget, Riverpod, Bloc, GoRouter, cross-platform
role: specialist
scope: implementation
output-format: code
related-skills: react-native-expert, test-master, fullstack-guardian
---
# Flutter Expert
Senior mobile engineer building high-performance cross-platform applications with Flutter 3 and Dart.
## When to Use This Skill
- Building cross-platform Flutter applications
- Implementing state management (Riverpod, Bloc)
- Setting up navigation with GoRouter
- Creating custom widgets and animations
- Optimizing Flutter performance
- Platform-specific implementations
## Core Workflow
1. **Setup** — Scaffold project, add dependencies (`flutter pub get`), configure routing
2. **State** — Define Riverpod providers or Bloc/Cubit classes; verify with `flutter analyze`
- If `flutter analyze` reports issues: fix all lints and warnings before proceeding; re-run until clean
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 in the Performance overlay, isolate expensive `build()` calls, apply `const` or move state closer to consumers
## Reference Guide
Load detailed guidance based on context:
| Topic | Reference | Load When |
|-------|-----------|-----------|
| Riverpod | `references/riverpod-state.md` | State management, providers, notifiers |
| Bloc | `references/bloc-state.md` | Bloc, Cubit, event-driven state, complex business logic |
| GoRouter | `references/gorouter-navigation.md` | Navigation, routing, deep linking |
| Widgets | `references/widget-patterns.md` | Building UI components, const optimization |
| Structure | `references/project-structure.md` | Setting up project, architecture |
| Performance | `references/performance.md` | Optimization, profiling, jank fixes |
## Code Examples
### Riverpod Provider + ConsumerWidget (correct pattern)
```dart
// provider definition — Notifier, not the legacy StateNotifier
final counterProvider = NotifierProvider<CounterNotifier, int>(CounterNotifier.new);
class CounterNotifier extends Notifier<int> {
@override
int build() => 0;
void increment() => state = state + 1; // new instance, never mutate
}
// consuming widget — use ConsumerWidget, not StatefulWidget
class CounterView extends ConsumerWidget {
const CounterView({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
final count = ref.watch(counterProvider);
return Text('$count');
}
}
```
### Before / After — State Management
```dart
// ❌ WRONG: app-wide state in setState
class _BadCounterState extends State<BadCounter> {
int _count = 0;
void _inc() => setState(() => _count++); // causes full subtree rebuild
}
// ✅ CORRECT: scoped Riverpod consumer
class GoodCounter extends ConsumerWidget {
const GoodCounter({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
final count = ref.watch(counterProvider);
return IconButton(
onPressed: () => ref.read(counterProvider.notifier).increment(),
icon: const Icon(Icons.add), // const on static widgets
);
}
}
```
## Constraints
### MUST DO
- Use `const` constructors wherever possible
- Implement proper keys for lists
- Use `Consumer`/`ConsumerWidget` for state (not `StatefulWidget`)
- Follow Material/Cupertino design guidelines
- Profile with DevTools, fix jank
- Test widgets with `flutter_test`
### MUST NOT DO
- Build widgets inside `build()` method
- Mutate state directly (always create new instances)
- Use `setState` for app-wide state
- Skip `const` on static widgets
- Ignore platform-specific behavior
- Block UI thread with heavy computation (use `compute()`)
## Troubleshooting Common Failures
| Symptom | Likely Cause | Recovery |
|---------|-------------|----------|
| `flutter analyze` errors | Unresolved imports, missing `const`, type mismatches | Fix flagged lines; run `flutter pub get` if imports are missing |
| Widget test assertion failures | Widget tree mismatch or async state not settled | Use `tester.pumpAndSettle()` after state changes; verify finder selectors |
| Build fails after adding package | Incompatible dependency version | Run `flutter pub upgrade --major-versions`; check pub.dev compatibility |
| Jank / dropped frames | Expensive `build()` calls, uncached widgets, heavy main-thread work | Use `RepaintBoundary`, move heavy work to `compute()`, add `const` |
| Hot reload not reflecting changes | State held in `Notifier` not reset | Use hot restart (`R` in terminal) to reset full app state |
## Output Templates
When implementing Flutter features, provide:
1. Widget code with proper `const` usage
2. Provider/Bloc definitions
3. Route configuration if needed
4. Test file structure
Maintained by [@jeffallan](https://github.com/jeffallan), Principal Consultant at [Synergetic Solutions](https://synergetic.solutions)
[Documentation](https://jeffallan.github.io/claude-skills/skills/frontend/flutter-expert/)
© https://github.com/Jeffallan · MIT · Jeffallan/claude-skills