Agent-skills-standard dart-best-practices
Dart code quality conventions: naming, const/final/var hierarchy, single quotes, trailing commas, collection idioms, tear-offs, and import organization. Use when writing new Dart code or reviewing for style violations — wrong import style, global variables, var misuse, anonymous lambdas where tear-offs fit, or missing trailing commas. (triggers: **/*.dart, naming, convention, trailing comma, import, tear-off)
install
source · Clone the upstream repo
git clone https://github.com/HoangNguyen0403/agent-skills-standard
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/HoangNguyen0403/agent-skills-standard "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/dart/dart-best-practices" ~/.claude/skills/hoangnguyen0403-agent-skills-standard-dart-best-practices && rm -rf "$T"
manifest:
skills/dart/dart-best-practices/SKILL.mdsource content
Dart Best Practices
Priority: P1 (OPERATIONAL)
- Scoping:
- No global variables.
- Private globals (if required) must start with
._ - Immutability: Use
>const
>final
.var - Config: Use
for secrets. Never hardcode API keys.--dart-define - Naming: Follow effective-dart (PascalCase classes, camelCase members).
- Strings: Prefer single quotes; use double quotes only for interpolation needs.
- Trailing Commas: Always use trailing commas for multi-line literals/params.
- Expression Bodies: Prefer
for single-expression functions/getters.=> - Collections:
- Use
,.map
,.where
,.fold
over manual loops when clarity improves..any - Type empty collections (
,<String>[]
) to avoid<String, User>{}
.dynamic - Use collection
/if
and spread operators for composable lists/maps.for - Async: Always
futures unless intentionally fire-and-forget.await
import 'models/user.dart'; // Good import 'package:app/models/user.dart'; // Avoid local absolute
Anti-Patterns
- No var for non-obvious types: Use
or explicit type;final
only for locally-obvious short scopes.var - No package imports within same package: Use relative imports for intra-package files.
- No top-level mutable state: Encapsulate in class or inject via DI.
- No anonymous lambdas for tear-offs: Prefer
over anonymous form.list.forEach(doSomething)