flutter-expert — скилл для Claude Code: Flutter и Dart
Скилл для разработки кросс-платформных приложений на Flutter 3+ и Dart. Помогает с виджетами, управлением состоянием через Riverpod или Bloc, маршрутизацией GoRouter и оптимизацией производительности.
npx skills add Jeffallan/claude-skills --skill flutter-expert -a claude-codeЧто делает flutter-expert
flutter-expert специализируется на полном цикле разработки Flutter-приложений: от настройки проекта и добавления зависимостей до написания тестов и профилирования. Скилл охватывает построение переиспользуемых компонентов с const-оптимизацией, настройку провайдеров Riverpod или Bloc/Cubit для управления состоянием, конфигурацию маршрутизации с GoRouter и специфичные для платформы реализации.
Внутри скилл предлагает пошаговый рабочий процесс: сначала скаффолдинг и настройка маршрутов, затем определение провайдеров или классов Bloc с проверкой через flutter analyze, построение виджетов с тестами после каждой фичи, запуск flutter test --coverage и, наконец, профилирование в режиме --profile для устранения джанка. Каждый шаг включает контрольные точки: если flutter analyze выдаёт ошибки, их нужно исправить перед переходом дальше; если падают тесты — DevTools покажет проблему в дереве виджетов.
Скилл работает на всех основных платформах ИИ-кодинга: Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI и OpenCode. Требует Flutter 3+, Dart и знакомства с консолью (flutter pub get, flutter test, flutter run --profile).
Какие задачи решает
- Настроить управление состоянием Riverpod или Bloc в Flutter-проекте
- Построить переиспользуемые виджеты с const-оптимизацией
- Настроить навигацию и маршруты через GoRouter
- Найти и устранить джанк и провалы кадров в приложении
- Написать тесты для виджетов и интеграции
Примеры запросов агенту
- Помоги мне добавить Riverpod провайдер для счётчика и переделать StatefulWidget в ConsumerWidget
- Как настроить GoRouter с именованными маршрутами для моего приложения?
- Профилируй мой виджет с помощью Flutter DevTools и подскажи, почему падают кадры
Как установить flutter-expert
1Через Skills CLI (Vercel)
npx skills add Jeffallan/claude-skills --skill flutter-expert -a claude-code2Вручную: положить файлы
~/.claude/skills/flutter-expert/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/flutter-expert/
1Через Skills CLI (Vercel)
npx skills add Jeffallan/claude-skills --skill flutter-expert -a codex2Вручную: положить файлы
.agents/skills/flutter-expert/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add Jeffallan/claude-skills --skill flutter-expert -a cursor2Вручную: положить файлы
.cursor/skills/flutter-expert/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install Jeffallan/claude-skills flutter-expert2Вручную: положить файлы
.github/skills/flutter-expert/SKILL.md1Через Skills CLI (Vercel)
npx skills add Jeffallan/claude-skills --skill flutter-expert -a gemini-cli2Командой платформы
gemini skills install https://github.com/Jeffallan/claude-skills --path skills/flutter-expertВручную: положить файлы
.devin/skills/flutter-expert/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add Jeffallan/claude-skills --skill flutter-expert -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
Из того же набора5
Весь набор →Похожие
Вопросы о flutter-expert
Как установить flutter-expert в Claude Code?
Выполни npx skills add Jeffallan/claude-skills --skill flutter-expert -a claude-code, затем убедись, что файл SKILL.md загружен в ~/.claude/skills/flutter-expert/.
Что делает flutter-expert?
Скилл проводит тебя через полный цикл разработки Flutter-приложений: от настройки проекта через управление состоянием и построение виджетов до тестирования и оптимизации производительности. Охватывает Riverpod, Bloc, GoRouter и платформ-специфичные реализации.
Какие версии Flutter поддерживает flutter-expert?
Скилл рассчитан на Flutter 3+. Использует современные паттерны: Riverpod с Notifier вместо устаревшего StateNotifier, ConsumerWidget вместо StatefulWidget, const-оптимизацию.
Исходный текст
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