InjectGenerator class

CherryPick DI field injector generator for codegen.

Analyzes all Dart classes marked with @injectable() and generates a mixin (for example, _$ProfileScreen) which contains the _inject method. This method will assign all fields annotated with @inject() using the CherryPick DI container. Extra annotation qualifiers such as @named and @scope are respected for each field. Nullable fields and Future/injectable async dependencies are also supported automatically.


Example usage in a project:

import 'package:cherrypick_annotations/cherrypick_annotations.dart';

@injectable()
class MyScreen with _$MyScreen {
  @inject()
  late final Logger logger;

  @inject()
  @named('test')
  late final HttpClient client;

  @inject()
  Future<Analytics>? analytics;
}

After running build_runner, this mixin will be auto-generated:

mixin _$MyScreen {
  void _inject(MyScreen instance) {
    instance.logger = CherryPick.openRootScope().resolve<Logger>();
    instance.client = CherryPick.openRootScope().resolve<HttpClient>(named: 'test');
    instance.analytics = CherryPick.openRootScope().tryResolveAsync<Analytics>(); // nullable async inject
  }
}

You may use the mixin (e.g., myScreen._inject(myScreen)) or expose your own public helper for instance field injection.

Supported scenarios:

  • Ordinary injectable fields: resolve<T>().
  • Named qualifiers: resolve<T>(named: ...).
  • Scoping: CherryPick.openScope(scopeName: ...).resolve<T>().
  • Nullable/incomplete fields: tryResolve/tryResolveAsync.
  • Async dependencies: Future<T>/resolveAsync<T>().

See also:

  • @inject
  • @injectable

Constructors

InjectGenerator.new()
const

Properties

hashCode int
The hash code for this object.
no setterinherited
inPackage String?
Annotation package for TypeChecker.typeNamed.
finalinherited
inSdk bool?
Annotation package type for TypeChecker.typeNamed.
finalinherited
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
throwOnUnresolved bool
finalinherited
typeChecker → TypeChecker
no setterinherited

Methods

generate(LibraryReader library, BuildStep buildStep) FutureOr<String>
Generates Dart code for an input Dart library.
inherited
generateForAnnotatedDirective(ElementDirective directive, ConstantReader annotation, BuildStep buildStep) → dynamic
Implement to return source code to generate for directive:
inherited
generateForAnnotatedElement(Element2 element, ConstantReader annotation, BuildStep buildStep) → dynamic
Main entry point for CherryPick field injection code generation.
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
toString() String
A string representation of this object.
inherited

Operators

operator ==(Object other) bool
The equality operator.
inherited