untilExactlyK<T extends Object> method
Waits until a dependency with the exact typeEntity
is registered.
The result is cast to T
.
Note: Requires enableUntilExactlyK: true
during registration.
If typeEntity
doesn't match an existing or future registration exactly,
this will not resolve.
Implementation
Resolvable<T> untilExactlyK<T extends Object>(
Entity typeEntity, {
Entity groupEntity = const DefaultEntity(),
bool traverse = true,
}) {
final g = groupEntity.preferOverDefault(focusGroup);
final test = getK(typeEntity, groupEntity: g);
UNSAFE:
{
if (test.isSome()) {
return test.unwrap().map((e) => e as T);
}
var completer = completersK[g]?.firstWhereOrNull(
(e) => e.typeEntity == typeEntity,
);
if (completer == null) {
completer = ReservedSafeCompleter(typeEntity);
(completersK[g] ??= []).add(completer);
}
return completer.resolvable().map((_) {
final temp = completersK[g] ?? [];
for (var n = 0; n < temp.length; n++) {
final e = temp[n];
if (e.typeEntity == typeEntity) {
temp.removeAt(n);
break;
}
}
return getK<T>(typeEntity, groupEntity: g).unwrap();
}).flatten();
}
}