- @override
Populates the properties of a this instance from a map.
This method will thrown an exception if a key in the map does not match a property of the receiver.
Usage: var values = JSON.decode(requestBody); var user = new User() ..readFromMap(values);
Source
@override
void readFromMap(Map<String, dynamic> keyValues) {
var mirror = reflect(this);
keyValues.forEach((k, v) {
if (_isPropertyPrivate(k)) {
return;
}
var property = entity.properties[k];
if (property == null) {
throw new QueryException(QueryExceptionEvent.requestFailure,
message:
"Key $k does not exist for ${MirrorSystem.getName(mirror.type.simpleName)}");
}
if (property is ManagedAttributeDescription) {
if (!property.isTransient) {
backing.setValueForProperty(entity, k, property.convertFromPrimitiveValue(v));
} else {
if (!property.transientStatus.isAvailableAsInput) {
throw new QueryException(QueryExceptionEvent.requestFailure,
message:
"Key $k does not exist for ${MirrorSystem.getName(mirror.type.simpleName)}");
}
var decodedValue = property.convertFromPrimitiveValue(v);
if (!property.isAssignableWith(decodedValue)) {
var valueTypeName =
MirrorSystem.getName(reflect(decodedValue).type.simpleName);
throw new QueryException(QueryExceptionEvent.requestFailure,
message:
"Type mismatch for property ${property.name} on ${MirrorSystem.getName(entity.persistentType.simpleName)}, expected assignable type matching ${property.type} but got $valueTypeName.");
}
mirror.setField(new Symbol(k), decodedValue);
}
} else {
backing.setValueForProperty(entity, k, property.convertFromPrimitiveValue(v));
}
});
}