/flutter-review
Review Flutter/Dart code for idiomatic patterns, widget best practices, state management, performance, accessibility, and security. Invokes the flutter-reviewer agent.
> /plugin marketplace add affaan-m/ECC > /plugin install ecc@ecc
How it fires
How this command gets triggered: by you, by Claude, or both.
- Fires itselfClaude auto-loads it when your prompt matches the work.
- You can call itInvoke it directly when you want it.
- Slash command
/flutter-review
Context preview
What this command does when you run it.
Review Flutter/Dart code for idiomatic patterns, widget best practices, state management, performance, accessibility, and security. Invokes the flutter-reviewer agent.
Command definition
flutter-review.mddescription: Review Flutter/Dart code for idiomatic patterns, widget best practices, state management, performance, accessibility, and security. Invokes the flutter-reviewer agent.
Flutter Code Review
This command invokes the **flutter-reviewer** agent to review Flutter/Dart code changes.
What This Command Does
1. **Gather Context**: Review `git diff --staged` and `git diff` 2. **Inspect Project**: Check `pubspec.yaml`, `analysis_options.yaml`, state management solution 3. **Security Pre-scan**: Check for hardcoded secrets and critical security issues 4. **Full Review**: Apply the complete review checklist 5. **Report Findings**: Output issues grouped by severity with fix guidance
Prerequisites
Before running `/flutter-review`, ensure: 1. **Build passes** — run `/flutter-build` first; a review on broken code is incomplete 2. **Tests pass** — run `/flutter-test` to confirm no regressions 3. **No merge conflicts** — resolve all conflicts so the diff reflects only intentional changes 4. **`flutter analyze` is clean** — fix analyzer warnings before review
When to Use
Use `/flutter-review` when:
- Before submitting a PR with Flutter/Dart changes (after build and tests pass)
- After implementing a new feature to catch issues early
- When reviewing someone else's Flutter code
- To audit a widget, state management component, or service class
- Before a production release
Review Areas
| Area | Severity | |------|----------| | Hardcoded secrets, cleartext HTTP | CRITICAL | | Architecture violations, state management anti-patterns | CRITICAL | | Widget rebuild issues, resource leaks | HIGH | | Missing `dispose()`, `BuildContext` after await | HIGH | | Dart null safety, missing error/loading states | HIGH | | Const propagation, widget composition | HIGH | | Performance: expensive work in `build()` | HIGH | | Accessibility, semantic labels | MEDIUM | | Missing tests for state transitions | HIGH | | Hardcoded strings (l10n) | MEDIUM | | Pub dependency hygiene | LOW |
Example Session
User: /flutter-review
Agent:
# Flutter Code Review
## Context
Changed files:
- lib/features/auth/presentation/login_page.dart
- lib/features/auth/data/auth_repository_impl.dart
State management: Riverpod (detected from pubspec.yaml)
Architecture: feature-first
## Security Pre-scan
✓ No hardcoded secrets detected
✓ No cleartext HTTP calls
## Review Findings
[HIGH] BuildContext used after async gap without mounted check
File: lib/features/auth/presentation/login_page.dart:67
Issue: `context.go('/home')` called after `await auth.login(...)` with no `mounted` check.
Fix: Add `if (!context.mounted) return;` before any navigation after awaits (Flutter 3.7+).
[HIGH] AsyncValue error state not handled
File: lib/features/auth/presentation/login_page.dart:42
Issue: `ref.watch(authProvider)` switches on loading/data but has no `error` branch.
Fix: Add error case to the switch expression or `when()` call to show a user-facing error message.
[MEDIUM] Hardcoded string not localized
File: lib/features/auth/presentation/login_page.dart:89
Issue: `Text('Login')` — user-visible string not using localization system.
Fix: Use the project's l10n accessor: `Text(context.l10n.loginButton)`.
## Review Summary
| Severity | Count | Status |
|----------|-------|--------|
| CRITICAL | 0 | pass |
| HIGH | 2 | block |
| MEDIUM | 1 | info |
| LOW | 0 | note |
Verdict: BLOCK — HIGH issues must be fixed before merge.
````
## Approval Criteria
- **Approve**: No CRITICAL or HIGH issues
- **Block**: Any CRITICAL or HIGH issues must be fixed before merge
## Related Commands
- `/flutter-build` — Fix build errors first
- `/flutter-test` — Run tests before reviewing
- `/code-review` — General code review (language-agnostic)
## Related
- Agent: `agents/flutter-reviewer.md`
- Skill: `skills/flutter-dart-code-review/`
- Rules: `rules/dart/`Read more
description: Review Flutter/Dart code for idiomatic patterns, widget best practices, state management, performance, accessibility, and security. Invokes the flutter-reviewer agent.
Flutter Code Review
This command invokes the **flutter-reviewer** agent to review Flutter/Dart code changes.
What This Command Does
1. **Gather Context**: Review `git diff --staged` and `git diff` 2. **Inspect Project**: Check `pubspec.yaml`, `analysis_options.yaml`, state management solution 3. **Security Pre-scan**: Check for hardcoded secrets and critical security issues 4. **Full Review**: Apply the complete review checklist 5. **Report Findings**: Output issues grouped by severity with fix guidance
Prerequisites
Before running `/flutter-review`, ensure: 1. **Build passes** — run `/flutter-build` first; a review on broken code is incomplete 2. **Tests pass** — run `/flutter-test` to confirm no regressions 3. **No merge conflicts** — resolve all conflicts so the diff reflects only intentional changes 4. **`flutter analyze` is clean** — fix analyzer warnings before review
When to Use
Use `/flutter-review` when:
- Before submitting a PR with Flutter/Dart changes (after build and tests pass)
- After implementing a new feature to catch issues early
- When reviewing someone else's Flutter code
- To audit a widget, state management component, or service class
- Before a production release
Review Areas
| Area | Severity | |------|----------| | Hardcoded secrets, cleartext HTTP | CRITICAL | | Architecture violations, state management anti-patterns | CRITICAL | | Widget rebuild issues, resource leaks | HIGH | | Missing `dispose()`, `BuildContext` after await | HIGH | | Dart null safety, missing error/loading states | HIGH | | Const propagation, widget composition | HIGH | | Performance: expensive work in `build()` | HIGH | | Accessibility, semantic labels | MEDIUM | | Missing tests for state transitions | HIGH | | Hardcoded strings (l10n) | MEDIUM | | Pub dependency hygiene | LOW |
Example Session
User: /flutter-review
Agent:
# Flutter Code Review
## Context
Changed files:
- lib/features/auth/presentation/login_page.dart
- lib/features/auth/data/auth_repository_impl.dart
State management: Riverpod (detected from pubspec.yaml)
Architecture: feature-first
## Security Pre-scan
✓ No hardcoded secrets detected
✓ No cleartext HTTP calls
## Review Findings
[HIGH] BuildContext used after async gap without mounted check
File: lib/features/auth/presentation/login_page.dart:67
Issue: `context.go('/home')` called after `await auth.login(...)` with no `mounted` check.
Fix: Add `if (!context.mounted) return;` before any navigation after awaits (Flutter 3.7+).
[HIGH] AsyncValue error state not handled
File: lib/features/auth/presentation/login_page.dart:42
Issue: `ref.watch(authProvider)` switches on loading/data but has no `error` branch.
Fix: Add error case to the switch expression or `when()` call to show a user-facing error message.
[MEDIUM] Hardcoded string not localized
File: lib/features/auth/presentation/login_page.dart:89
Issue: `Text('Login')` — user-visible string not using localization system.
Fix: Use the project's l10n accessor: `Text(context.l10n.loginButton)`.
## Review Summary
| Severity | Count | Status |
|----------|-------|--------|
| CRITICAL | 0 | pass |
| HIGH | 2 | block |
| MEDIUM | 1 | info |
| LOW | 0 | note |
Verdict: BLOCK — HIGH issues must be fixed before merge.
````
## Approval Criteria
- **Approve**: No CRITICAL or HIGH issues
- **Block**: Any CRITICAL or HIGH issues must be fixed before merge
## Related Commands
- `/flutter-build` — Fix build errors first
- `/flutter-test` — Run tests before reviewing
- `/code-review` — General code review (language-agnostic)
## Related
- Agent: `agents/flutter-reviewer.md`
- Skill: `skills/flutter-dart-code-review/`
- Rules: `rules/dart/`Your agent can write code, but ECC gives it a coordinated engineering system and toolbox: it plans before it builds, verifies changes with tests, reviews its own work from a fresh context, remembers what matters, and turns repeated wins into reusable skills
Repo: affaan-m/ECC
Other commands on ecc.
- /add-language-rules
Workflow command scaffold for add-language-rules in everything-claude-code.
Open command - /database-migration
Workflow command scaffold for database-migration in everything-claude-code.
Open command - /feature-development
Workflow command scaffold for feature-development in everything-claude-code.
Open command - /aside
Answer a quick side question without interrupting or losing context from the current task. Resume work automatically after answering.
Open command - /auto-update
Pull the latest ECC repo changes and reinstall the current managed targets.
Open command - /build-fix
Detect the project build system and incrementally fix build/type errors with minimal safe changes.
Open command

