getCachedEntitiesByIDs<O> method
Returns the cached entities of type
with ids
.
- If
removeCachedIDs
istrue
it will remove the matching cached entities fromids
.
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;
}
}