createFromMap method

FutureOr<O> createFromMap(
  1. Map<String, dynamic> fields, {
  2. EntityProvider? entityProvider,
  3. EntityCache? entityCache,
  4. EntityHandlerProvider? entityHandlerProvider,
  5. EntityRepositoryProvider? entityRepositoryProvider,
  6. EntityResolutionRules? resolutionRules,
  7. JsonDecoder? jsonDecoder,
})

Creates an entity O with fields.

Implementation

FutureOr<O> createFromMap(Map<String, dynamic> fields,
    {EntityProvider? entityProvider,
    EntityCache? entityCache,
    EntityHandlerProvider? entityHandlerProvider,
    EntityRepositoryProvider? entityRepositoryProvider,
    EntityResolutionRules? resolutionRules,
    JsonDecoder? jsonDecoder}) {
  entityCache ??= JsonEntityCacheSimple();
  jsonDecoder ??= Json.defaultDecoder;

  var returnFieldsUsedKeys = <String>[];

  return resolveFieldsNamesAndValues(fields,
          entityProvider: entityProvider,
          entityCache: entityCache,
          entityHandlerProvider: entityHandlerProvider,
          entityRepositoryProvider: entityRepositoryProvider,
          returnFieldsUsedKeys: returnFieldsUsedKeys,
          resolutionRules: resolutionRules)
      .resolveMapped((resolvedFields) {
    try {
      // Add unresolved fields, to allow non field parameters,
      // constructors with parameters different from class field name.
      for (var f in fields.keys) {
        if (!returnFieldsUsedKeys.contains(f)) {
          resolvedFields[f] = fields[f];
        }
      }

      return instantiateFromMapImpl(resolvedFields, jsonDecoder: jsonDecoder)
          .resolveMapped((o) {
        if (o != null) {
          entityCache!.cacheEntity(o, getID);
          return o;
        } else {
          return _createFromMapDefaultImpl(
              resolvedFields, entityProvider, entityCache!, resolutionRules);
        }
      });
    } catch (e, s) {
      if (e is! UnresolvedParameterError) {
        _log.warning(
            "Error creating `$type` from `Map` using `instantiatorFromMap`. Trying instantiation with default constructor...",
            e,
            s);
      }

      return _createFromMapDefaultImpl(
          fields, entityProvider, entityCache!, resolutionRules);
    }
  });
}