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