EntityReference<T>.fromJson constructor

EntityReference<T>.fromJson(
  1. Map<String, dynamic> json, {
  2. Type? type,
  3. String? typeName,
  4. EntityHandler<T>? entityHandler,
  5. EntityProvider? entityProvider,
  6. EntityHandlerProvider? entityHandlerProvider,
  7. EntityFetcher<T>? entityFetcher,
  8. 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) {
      var entityMap = entity is Map
          ? entity
          : TypeParser.parseMap(entity) ?? <String, dynamic>{};

      var entityMapCast = entityMap is Map<String, dynamic>
          ? entityMap
          : entityMap.map((key, value) => MapEntry('$key', value));

      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 {
    return EntityReference<T>.fromEntityMap(json,
            type: type,
            typeName: typeName,
            entityHandler: entityHandler,
            entityProvider: entityProvider,
            entityHandlerProvider: entityHandlerProvider,
            entityFetcher: entityFetcher,
            entityCache: entityCache,
            checkGenericType: false)
        ._autoCast();
  }
}