Agent-skills-standard flutter-dependency-injection

Configure automated service locator setup using injectable and get_it. Use when wiring dependency injection with injectable and get_it in Flutter. (triggers: **/injection.dart, **/locator.dart, GetIt, injectable, singleton, module, lazySingleton, factory)

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/flutter/flutter-dependency-injection" ~/.claude/skills/hoangnguyen0403-agent-skills-standard-flutter-dependency-injection && rm -rf "$T"
manifest: skills/flutter/flutter-dependency-injection/SKILL.md
source content

Dependency Injection

Priority: P1 (HIGH)

Structure

core/injection/
├── injection.dart  # Initialization & setup
└── modules/        # Third-party dependency modules (Dio, Storage)

Implementation Workflow

  1. Annotate classes — Use
    @injectable
    annotations; avoid manual registry calls.
  2. Choose scope — Default to
    @LazySingleton
    for repositories, services, and data sources (init on demand).
  3. Register BLoCs as factories — Use
    @injectable
    (Factory) for BLoCs to ensure state resets per instance. Never use
    @Singleton()
    for BLoCs.
  4. Inject abstractions — Always register implementations as abstract interfaces (
    as: IService
    ).
  5. Register third-party deps — Use
    @module
    for external instances (Dio, Hive, SharedPreferences).
  6. Prefer constructor injection — Use mandatory constructor parameters;
    injectable
    resolves them automatically.

Registration & Test Mock Examples

See implementation examples for module registration and test mock swap patterns.

Reference & Examples

For module configuration and initialization templates: See references/REFERENCE.md.

Anti-Patterns

  • No Inline
    getIt
    Calls
    : Inject via constructor instead of calling GetIt in UI
    build()
  • No
    @Singleton
    BLoCs
    : Always use
    @injectable
    (Factory) to ensure state resets
  • No Concrete Class Injection: Always inject abstract interface (e.g.,
    IOrderRepository
    )
  • No Manual Registration: Use
    @injectable
    annotations instead of manual
    getIt.register
    calls in production code

Related Topics

layer-based-clean-architecture | testing