Skillshub 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/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/HoangNguyen0403/agent-skills-standard/dart-best-practices" ~/.claude/skills/comeonoliver-skillshub-dart-best-practices && rm -rf "$T"
manifest:
skills/HoangNguyen0403/agent-skills-standard/dart-best-practices/SKILL.mdsource content
Dart Best Practices
Priority: P1 (OPERATIONAL)
Best practices for writing clean, maintainable Dart code.
- 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
- Use
- 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
- ❌
— usevar result = fetchOrders()
or an explicit type;final
only for locally obvious types in short scopesvar - ❌
within the same package — use relative imports for intra-package filesimport 'package:myapp/features/orders/order_model.dart' - ❌ Top-level mutable
— no global mutable state; use DI or encapsulate in a classList<Order> cachedOrders = [] - ❌
— prefer tear-offs:list.forEach((item) => doSomething(item))list.forEach(doSomething)