getEntityMapKeyValue method
KeyConditionValue?
getEntityMapKeyValue(
- Map<
String, dynamic> ? entityMap, [ - EntityHandler<
O> ? entityHandler
Implementation
KeyConditionValue? getEntityMapKeyValue(
Map<String, dynamic>? entityMap, [
EntityHandler<O>? entityHandler,
]) {
if (entityMap == null || entityMap.isEmpty) return null;
dynamic value = entityMap;
TypeInfo? valueType = TypeInfo.from(
entityHandler?.type ?? entityMap.runtimeType,
);
EntityHandler? valueEntityHandler = entityHandler;
for (var key in keys) {
Object? keyValue;
TypeInfo? keyType;
EntityHandler? keyEntityHandler;
if (key is ConditionKeyField) {
var keyName = key.name;
if (value is Map) {
keyValue = value[keyName];
} else if (value is Iterable) {
keyValue = value.map((e) {
if (e is Map) {
return e[keyName];
} else {
var handler = entityHandler?.getEntityHandler(obj: e);
if (handler != null) {
var v = handler.getField(e, keyName);
return v;
} else {
return e;
}
}
}).toList();
} else {
throw StateError(
"Can't access key[$keyName] for type: ${(value as Object?).runtimeTypeNameUnsafe}",
);
}
keyType = _resolveValueType(
keyName,
valueType,
valueEntityHandler,
keyValue,
);
keyEntityHandler = _resolveValueEntityHandler(
keyType,
valueEntityHandler,
);
} else if (key is ConditionKeyIndex) {
var index = key.index;
if (value is Iterable) {
keyValue = value.elementAt(index);
keyType = _resolveValueType(
null,
valueType,
valueEntityHandler,
keyValue,
);
keyEntityHandler = _resolveValueEntityHandler(
keyType,
valueEntityHandler,
);
} else {
throw StateError(
"Can't access index[$index] for type: ${(value as Object?).runtimeTypeNameUnsafe}",
);
}
}
if (keyValue == null) {
return null;
} else {
value = keyValue;
valueType = keyType;
valueEntityHandler = keyEntityHandler;
}
}
if (valueEntityHandler != null) {
var idFieldName = valueEntityHandler.idFieldName();
if (value is Map) {
value = value[idFieldName];
} else if (value is Iterable) {
value = value.map((v) => v is Map ? v[idFieldName] : v).toList();
}
}
return KeyConditionValue(value, valueType, valueEntityHandler);
}