create method

T create({
  1. R? arg,
  2. bool useCache = true,
})

Creates a new bloc, or retrieves a cached one

if useCache is false then a new bloc is created everytime, otherwise returns a cached bloc if it exists

Implementation

T create({R? arg, bool useCache = true}) {
  if (_toInject != null) {
    return _toInject!;
  }

  if (!useCache) {
    return _builder(arg);
  }

  final cacheKey = TypeAndArg(T, arg);

  if (_cache.containsKey(cacheKey)) {
    return _cache[cacheKey]! as T;
  }

  final bloc = _builder(arg);

  _cache.addAll({cacheKey: bloc});

  final numCached = _cache.keys.where((e) => e.type == T).length;

  if (numCached > 2) {
    _log.warning('you have already cached $numCached ${T}s');
  }

  return bloc;
}