find<T> static method
Finds a registered kind for T
.
If instance
implements HasKind, the method tries to determine
the kind with HasKind.runtimeKind.
If no kind has been found and instance
is non-null, the method seeks
the best kind for which Kind.isInstance is true.
If no kind has been found, the method tries to find a kind that has
exactly the same type as T
(Kind.dartType).
If no kind was found, the method inspects whether T
is a list type of
one of the registered kinds in Kind.all.
If no kind was found, the method inspects whether T
is a set type of one
of the registered kinds in Kind.all.
Whenever T
is nullable, the method returns a NullableKind.
Throws ArgumentError if no kind is registered for T
.
Implementation
static Kind<T> find<T>({T? instance}) {
if (instance == null) {
final kind = maybeFindByType<T>();
if (kind != null) {
return kind;
}
throw ArgumentError(
'Could not find kind for $T.\n'
'\n'
'Registered kinds are: ${_kinds.map((e) => e.dartType).join(', ')}',
);
} else {
final kind = maybeFindByInstance<T>(instance);
if (kind != null) {
return kind;
}
throw ArgumentError(
'Could not find kind for $T (given an instance of ${instance.runtimeType}).\n'
'\n'
'Registered kinds are: ${_kinds.map((e) => e.dartType).join(', ')}',
);
}
}