getCachedEntitiesByIDs<O> method

  1. @override
Map<dynamic, Object>? getCachedEntitiesByIDs<O>(
  1. List ids, {
  2. Type? type,
  3. bool instantiate = true,
  4. bool removeCachedIDs = false,
})
override

Returns the cached entities of type with ids.

  • If removeCachedIDs is true it will remove the matching cached entities from ids.

Implementation

@override
Map<dynamic, Object>? getCachedEntitiesByIDs<O>(
  List<dynamic> ids, {
  Type? type,
  bool instantiate = true,
  bool removeCachedIDs = false,
}) {
  type ??= O;

  Map<dynamic, Object>? cachedEntitiesByIDs;
  Map<dynamic, Object>? cachedEntitiesInstantiatorsByIDs;

  var cachedEntities = _entities?[type];
  if (cachedEntities != null) {
    cachedEntitiesByIDs = Map.fromEntries(
      ids.map((id) {
        var entity = cachedEntities[id];
        return entity != null ? MapEntry(id, entity) : null;
      }).nonNulls,
    );
  }

  var cachedEntitiesInstantiators = _entitiesInstantiators?[type];
  if (cachedEntitiesInstantiators != null) {
    cachedEntitiesInstantiatorsByIDs = Map.fromEntries(
      ids.map((id) {
        var entityInstantiator = cachedEntitiesInstantiators[id];
        if (entityInstantiator != null) {
          if (instantiate) {
            var entity = _instantiateEntity(type!, id);
            return entity != null ? MapEntry(id, entity) : null;
          } else {
            return MapEntry(id, entityInstantiator);
          }
        } else {
          return null;
        }
      }).nonNulls,
    );
  }

  if ((cachedEntitiesByIDs == null || cachedEntitiesByIDs.isEmpty) &&
      (cachedEntitiesInstantiatorsByIDs == null ||
          cachedEntitiesInstantiatorsByIDs.isEmpty)) {
    return null;
  }

  if (removeCachedIDs) {
    ids.removeWhere((id) {
      return (cachedEntitiesByIDs != null &&
              cachedEntitiesByIDs.containsKey(id)) ||
          (cachedEntitiesInstantiatorsByIDs != null &&
              cachedEntitiesInstantiatorsByIDs.containsKey(id));
    });
  }

  if (cachedEntitiesByIDs != null && cachedEntitiesByIDs.isNotEmpty) {
    if (cachedEntitiesInstantiatorsByIDs != null &&
        cachedEntitiesInstantiatorsByIDs.isNotEmpty) {
      return {...cachedEntitiesByIDs, ...cachedEntitiesInstantiatorsByIDs};
    } else {
      return cachedEntitiesByIDs;
    }
  } else {
    return cachedEntitiesInstantiatorsByIDs;
  }
}