Comprehensive, library-agnostic checklist for reviewing Flutter/Dart applications. These principles apply regardless of which state management solution, routing library, or DI framework is used.
Works with
AI-first code editor with Composer
Before installing skills in Cursor, ensure your development environment meets these requirements:
node --versionflutter-dart-code-reviewExecute the skills CLI command in your project's root directory to begin installation:
Fetches flutter-dart-code-review from affaan-m/everything-claude-code and configures it for Cursor.
The CLI shows a list of agents. Use arrow keys and space to select Cursor:
Confirm successful installation by checking the skill directory location:
Restart Cursor to activate flutter-dart-code-review. Access via /flutter-dart-code-review in your agent's command palette.
We perform automated surface-level scans (Gen AI Scanner, Socket, Snyk) during installation. These checks detect common vulnerabilities but do not guarantee complete security. Always review skill source code and verify the publisher's reputation before production use.
Skills execute code in your environment. Always review source, verify the publisher, and test in isolation before production.
Submit your Claude Code skill and start earning
Create detailed user stories, acceptance criteria, and feature specs
Example
Generate user stories for 'password reset feature' with acceptance criteria, edge cases, and test scenarios
Reduce spec writing time by 50%, ensure comprehensive coverage
Research competitors, compare features, identify gaps
Example
Analyze 5 competitor products, create feature comparison matrix, suggest differentiation opportunities
Complete competitive research in 2 hours instead of 2 days
Evaluate features using frameworks (RICE, ICE, Kano) and create prioritized backlogs
Example
Score 20 feature ideas using RICE framework, generate prioritized roadmap with rationale
2
total installs
2
this week
142.9K
GitHub stars
0
upvotes
Run in your terminal
2
installs
2
this week
142.9K
stars
Comprehensive, library-agnostic checklist for reviewing Flutter/Dart applications. These principles apply regardless of which state management solution, routing library, or DI framework is used.
pubspec.yaml is clean — no unused dependencies, versions pinned appropriatelyanalysis_options.yaml includes a strict lint set with strict analyzer settings enabledprint() statements in production code — use dart:developer log() or a logging package.g.dart, .freezed.dart, .gr.dart) are up-to-date or in .gitignoredynamic — enable strict-casts, strict-inference, strict-raw-types! (bang operator) instead of proper null checks or Dart 3 pattern matching (if (value case var v?))this.field where local variable promotion would workcatch (e) without on clause; always specify exception typesError: Error subtypes indicate bugs and should not be caughtasync: Functions marked async that never await — unnecessary overheadlate overuse: late used where nullable or constructor initialization would be safer; defers errors to runtimeStringBuffer instead of + for iterative string buildingconst contexts: Fields in const constructor classes should not be mutableFuture return values: Use await or explicitly call unawaited() to signal intentvar where final works: Prefer final for locals and const for compile-time constantspackage: imports for consistencyList/Mapif-case over verbose is checks and manual casting(String, int) instead of single-use DTOsprint() in production code: Use dart:developer log() or the project's logging package; print() has no log levels and cannot be filteredbuild() method exceeding ~80-100 lines_build*() helper methods that return widgets are extracted to separate widget classes (enables element reuse, const propagation, and framework optimizations)const constructors used wherever possible — prevents unnecessary rebuildsconst literals for collections that don't change (const [], const {})const when all fields are finalValueKey used in lists/grids to preserve state across reordersGlobalKey used sparingly — only when accessing state across the tree is truly neededUniqueKey avoided in build() — it forces rebuild every frameObjectKey used when identity is based on a data object rather than a single valueTheme.of(context).colorScheme — no hardcoded Colors.red or hex valuesTheme.of(context).textTheme — no inline TextStyle with raw font sizesbuild()Future.then() or async work in build().listen()) in build()setState() localized to smallest possible subtreeThese principles apply to all Flutter state management solutions (BLoC, Riverpod, Provider, GetX, MobX, Signals, ValueNotifier, etc.).
ref.watch is expected — flag only circular or overly tangled chainscopyWith() or constructors, never mutated in-place== and hashCode properly (all fields included in comparison)Equatable, freezed, Dart records, or otherList/Map@action in MobX, .value on signals, .obs in GetX) — direct field mutation bypasses change trackingReactionDisposer in MobX, effect cleanup in Signals)AsyncValue) — not boolean flags (isLoading, isError, hasData)// BAD — boolean flag soup allows impossible states
class UserState {
bool isLoading = false;
bool hasError = false; // isLoading && hasError is representable!
User? user;
}
// GOOD (immutable approach) — sealed types make impossible states unrepresentable
sealed class UserState {}
class UserInitial extends UserState {}
class UserLoading extends UserState {}
class UserLoaded extends UserState {
final User user;
const UserLoaded(this.user);
}
class UserError extends UserState {
final String message;
const UserError(this.message);
}
// GOOD (reactive approach) — observable enum + data, mutations via reactivity API
// enum UserStatus { initial, loading, loaded, error }
// Use your solution's observable/signal to wrap status and data separately
const widgets used to stop rebuild propagation through the tree.listen()) are cancelled in dispose() / close().listen())mounted check before setState in async callbacksBuildContext not used after await without checking context.mounted (Flutter 3.7+) — stale context causes crashesBuildContext never stored in singletons, state managers, or static fieldssetState, ValueNotifier)setState() not called at root widget level — localize state changesconst widgets used to stop rebuild propagationRepaintBoundary used around complex subtrees that repaint independentlyAnimatedBuilder child parameter used for subtrees independent of animationbuild() — compute in state management layerbuild()MediaQuery.of(context) usage is specific (e.g., MediaQuery.sizeOf(context))Image.asset with cacheWidth/cacheHeight to decode at display sizeListView.builder / GridView.builder used instead of ListView(children: [...]) for large or dynamic lists (concrete constructors are fine for small, static lists)deferred as) used for heavy libraries in web buildsOpacity widget avoided in animations — use AnimatedOpacity or FadeTransitionoperator == not overridden on widgets — use const constructors insteadIntrinsicHeight, IntrinsicWidth) used sparingly (extra layout pass)Make data-driven prioritization decisions faster
Draft PRDs, status updates, and stakeholder presentations
Example
Create executive summary of Q3 roadmap, monthly progress report, feature launch announcement
Save 3-5 hours/week on communication overhead
Prerequisites
Time Estimate
30-60 minutes to see productivity improvements
Steps
Common Pitfalls
✓ Do
✗ Don't
💡 Pro Tips
✓ Use when
Use for user story writing, competitive research, roadmap prioritization, stakeholder communication, and PRD drafting. Best for reducing repetitive documentation and research work.
✗ Avoid when
Avoid for strategic product vision (requires deep customer empathy), pricing decisions (needs market and financial expertise), or when face-to-face customer discovery is more valuable than speed.
asyrafhussin/agent-skills
shadcn/improve
ajianaz/skills-collection
mattpocock/skills
parcadei/continuous-claude-v3
cursor/plugins
Keeps context tight: flutter-dart-code-review is the kind of skill you can hand to a new teammate without a long onboarding doc.
I recommend flutter-dart-code-review for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.
flutter-dart-code-review fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
Useful defaults in flutter-dart-code-review — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
flutter-dart-code-review has been reliable in day-to-day use. Documentation quality is above average for community skills.
Registry listing for flutter-dart-code-review matched our evaluation — installs cleanly and behaves as described in the markdown.
Solid pick for teams standardizing on skills: flutter-dart-code-review is focused, and the summary matches what you get after install.
Solid pick for teams standardizing on skills: flutter-dart-code-review is focused, and the summary matches what you get after install.
flutter-dart-code-review reduced setup friction for our internal harness; good balance of opinion and flexibility.
flutter-dart-code-review has been reliable in day-to-day use. Documentation quality is above average for community skills.
showing 1-10 of 33