until<TSuper extends Object, TSub extends TSuper> method
Waits until a dependency of type TSuper
or its subtype TSub
is
registered. TSuper
should typically be the most general type expected.
Implementation
Resolvable<TSub> until<TSuper extends Object, TSub extends TSuper>({
Entity groupEntity = const DefaultEntity(),
bool traverse = true,
}) {
final typeEntity = TypeEntity(TSuper);
final g = groupEntity.preferOverDefault(focusGroup);
final test = get<TSuper>(groupEntity: g);
UNSAFE:
{
if (test.isSome()) {
return test.unwrap().transf();
}
ReservedSafeCompleter<TSuper>? completer;
var temp = getSyncOrNone<ReservedSafeCompleter<TSuper>>(
groupEntity: g,
traverse: traverse,
);
if (temp.isSome()) {
completer = temp.unwrap();
} else {
completer = ReservedSafeCompleter<TSuper>(typeEntity);
register(completer, groupEntity: g).end();
}
return completer
.resolvable()
.map((_) {
unregister<ReservedSafeCompleter<TSuper>>(groupEntity: g).end();
return get<TSuper>(groupEntity: g).unwrap();
})
.flatten()
.transf();
}
}