makeAsync<T> method

Future<T> makeAsync<T>([
  1. Type? type
])

Instantiates an instance of T, asynchronously.

It is similar to make, but resolves an injection of either Future<T> or T.

Implementation

Future<T> makeAsync<T>([Type? type]) {
  var t2 = T;
  if (type != null) {
    t2 = type;
  }

  Type? futureType; //.Future<T>.value(null).runtimeType;

  if (T == dynamic) {
    try {
      futureType = reflector.reflectFutureOf(t2).reflectedType;
    } on UnsupportedError {
      // Ignore this.
    }
  }

  if (has<T>(t2)) {
    return Future<T>.value(make(t2));
  } else if (has<Future<T>>()) {
    return make<Future<T>>();
  } else if (futureType != null) {
    return make(futureType);
  } else {
    throw ReflectionException(
        'No injection for Future<$t2> or $t2 was found.');
  }
}