EntityReference<T>.fromJson constructor
EntityReference<T>.fromJson (
- Map<
String, dynamic> json, { - Type? type,
- String? typeName,
- EntityHandler<
T> ? entityHandler, - EntityProvider? entityProvider,
- EntityHandlerProvider? entityHandlerProvider,
- EntityFetcher<
T> ? entityFetcher, - 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 entityToJson)
and instantiated through fromEntityMap.
Implementation
factory EntityReference.fromJson(
Map<String, dynamic> json, {
Type? type,
String? typeName,
EntityHandler<T>? entityHandler,
EntityProvider? entityProvider,
EntityHandlerProvider? entityHandlerProvider,
EntityFetcher<T>? entityFetcher,
EntityCache? entityCache,
}) {
var entityReferenceType = json['EntityReference'];
if (entityReferenceType != null) {
if (entityReferenceType is! String) {
throw ArgumentError("Invalid `EntityReference` JSON: $json");
}
typeName ??= entityReferenceType;
var id = json['id'];
var entity = json['entity'];
if (entity != null) {
if (id != null) {
entityHandler ??= EntityReferenceBase._resolveEntityHandlerGlobal(
type,
typeName,
entityHandlerProvider,
entityProvider,
);
if (entityHandler != null) {
var instantiator = EntityInstantiatorHandler(
entityHandler,
id,
entity,
entityCache: entityCache,
entityHandlerProvider: entityHandlerProvider,
);
return EntityReference<T>.fromEntityInstantiator(
id,
instantiator,
type: type,
typeName: typeName,
entityHandler: entityHandler,
entityProvider: entityProvider,
entityHandlerProvider: entityHandlerProvider,
entityFetcher: entityFetcher,
entityCache: entityCache,
checkGenericType: false,
)._autoCast();
}
}
var entityMapCast = _resolveEntityMap(entity);
return EntityReference<T>.fromEntityMap(
entityMapCast,
type: type,
typeName: typeName,
entityHandler: entityHandler,
entityProvider: entityProvider,
entityHandlerProvider: entityHandlerProvider,
entityFetcher: entityFetcher,
entityCache: entityCache,
checkGenericType: false,
)._autoCast();
} else if (id != null) {
return EntityReference<T>.fromID(
id,
type: type,
typeName: typeName,
entityHandler: entityHandler,
entityProvider: entityProvider,
entityHandlerProvider: entityHandlerProvider,
entityFetcher: entityFetcher,
entityCache: entityCache,
checkGenericType: false,
)._autoCast();
} else {
return EntityReference<T>.asNull(
type: type,
typeName: typeName,
entityHandler: entityHandler,
entityProvider: entityProvider,
entityHandlerProvider: entityHandlerProvider,
entityFetcher: entityFetcher,
entityCache: entityCache,
checkGenericType: false,
)._autoCast();
}
} else {
entityHandler ??= EntityReferenceBase._resolveEntityHandlerGlobal(
type,
typeName,
entityHandlerProvider,
entityProvider,
);
if (entityHandler != null) {
var id = entityHandler.getIDFromMap(json);
if (id != null) {
var instantiator = EntityInstantiatorHandler(
entityHandler,
id,
json,
entityCache: entityCache,
entityHandlerProvider: entityHandlerProvider,
);
return EntityReference<T>.fromEntityInstantiator(
id,
instantiator,
type: type,
typeName: typeName,
entityHandler: entityHandler,
entityProvider: entityProvider,
entityHandlerProvider: entityHandlerProvider,
entityFetcher: entityFetcher,
entityCache: entityCache,
checkGenericType: false,
)._autoCast();
}
}
return EntityReference<T>.fromEntityMap(
json,
type: type,
typeName: typeName,
entityHandler: entityHandler,
entityProvider: entityProvider,
entityHandlerProvider: entityHandlerProvider,
entityFetcher: entityFetcher,
entityCache: entityCache,
checkGenericType: false,
)._autoCast();
}
}