untilExactlyK<T extends Object> method

Resolvable<T> untilExactlyK<T extends Object>(
  1. Entity typeEntity, {
  2. Entity groupEntity = const DefaultEntity(),
  3. bool traverse = true,
})
inherited

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();
  }
}