EntityReferenceList<T>.fromJson constructor
EntityReferenceList<T>.fromJson (
- Map<
String, dynamic> json, { - Type? type,
- String? typeName,
- EntityHandler<
T> ? entityHandler, - EntityProvider? entityProvider,
- EntityHandlerProvider? entityHandlerProvider,
- EntitiesFetcher<
T> ? entitiesFetcher, - EntityCache? entityCache,
Creates an EntityReference from a JSON Map.
If json
has an entry EntityReference
it will be treated as a Map from toJson,
otherwise will be treated as an entity JSON (a Map from entitiesToJson)
and instantiated through fromEntityMap
.
Implementation
factory EntityReferenceList.fromJson(Map<String, dynamic> json,
{Type? type,
String? typeName,
EntityHandler<T>? entityHandler,
EntityProvider? entityProvider,
EntityHandlerProvider? entityHandlerProvider,
EntitiesFetcher<T>? entitiesFetcher,
EntityCache? entityCache}) {
var entityReferenceType = json['EntityReferenceList'];
if (entityReferenceType != null) {
if (entityReferenceType is! String) {
throw ArgumentError("Invalid `EntityReference` JSON: $json");
}
typeName ??= entityReferenceType;
var ids = json['ids'];
var entities = json['entities'];
if (entities != null && entities is List) {
var entitiesMaps = entities is List<Map<String, dynamic>?>
? entities
: entities.map((e) {
var m = e is Map ? e : TypeParser.parseMap(e);
return m is Map<String, dynamic>
? m
: m?.map((key, value) => MapEntry('$key', value));
}).toList(growable: false);
return EntityReferenceList<T>.fromEntitiesMaps(entitiesMaps,
type: type,
typeName: typeName,
entityHandler: entityHandler,
entityProvider: entityProvider,
entityHandlerProvider: entityHandlerProvider,
entitiesFetcher: entitiesFetcher,
entityCache: entityCache,
checkGenericType: false)
._autoCast();
} else if (ids != null && ids is List<Object?>) {
return EntityReferenceList<T>.fromIDs(ids,
type: type,
typeName: typeName,
entityHandler: entityHandler,
entityProvider: entityProvider,
entityHandlerProvider: entityHandlerProvider,
entitiesFetcher: entitiesFetcher,
entityCache: entityCache,
checkGenericType: false)
._autoCast();
} else {
return EntityReferenceList<T>.asEmpty(
type: type,
typeName: typeName,
entityHandler: entityHandler,
entityProvider: entityProvider,
entityHandlerProvider: entityHandlerProvider,
entitiesFetcher: entitiesFetcher,
entityCache: entityCache,
checkGenericType: false)
._autoCast();
}
} else {
var entityReferenceType = json['EntityReference'];
if (entityReferenceType != null) {
var entityReference =
EntityReference<T>.fromJson(json, entityCache: entityCache);
var isNull = entityReference.isNull;
var id = entityReference.id;
var entity = entityReference.entity;
return EntityReferenceList<T>._(
entityReference.type,
null,
isNull || id == null ? null : [id],
isNull || entity == null ? null : [entity],
null,
entityReference.entityHandler,
entityReference.entityProvider,
entityReference._entityHandlerProvider,
null,
entityCache,
false)
._autoCast();
}
return EntityReferenceList<T>.fromEntitiesMaps(
<Map<String, dynamic>>[json],
type: type,
typeName: typeName,
entityHandler: entityHandler,
entityProvider: entityProvider,
entityHandlerProvider: entityHandlerProvider,
entitiesFetcher: entitiesFetcher,
entityCache: entityCache,
checkGenericType: false)
._autoCast();
}
}