transform<T, R> method

Future<R> transform<T, R>([
  1. R transformer(
    1. T internal
    )?
])

Implementation

Future<R> transform<T, R>([R Function(T internal)? transformer]) async {
  await load<T>();

  if (transformer == null) {
    // Identity transform: just return the cached value as R
    if (_data[T] is! R) {
      throw StateError(
          "Type mismatch: requested $R, cached value is ${_data[T].runtimeType}");
    }

    return _data[T] as R;
  }

  // Apply transformer and cache by type R
  if (_data.containsKey(R))
    return _data[R] as R;

  try {
    final result = transformer(_data[T] as T);
    _data[R] = result;

    return result;
  }
  on Exception catch (e) {
    throw AssetException("error transforming asset assets/$path", cause: e);
  }

}