evalMemberExpression method
dynamic
evalMemberExpression(
- MemberExpression expression,
- Map<String, dynamic> context
)
Implementation
@override
dynamic evalMemberExpression(
MemberExpression expression, Map<String, dynamic> context) {
var data = eval(expression.object, context);
if (data is Map) {
return data[expression.property.name];
} else if (data is List && data.isNotEmpty && data.first is Map) {
if (expression.property.name.startsWith(r'$$')) {
var fieldName = expression.property.name.substring(2);
return data
.map((e) => e[fieldName])
.toList();
} else {
return data[0][expression.property.name];
}
} else if (data is List && data.isNotEmpty && data.first is List && data.first.isNotEmpty && data.first.first is Map)
{
if (expression.property.name.startsWith(r'$$')) {
var result = [];
var fieldName = expression.property.name.substring(2);
for (var item in data) {
result.addAll(item
.map((e) => e[fieldName]));
}
return result;
} else {
return data[0][expression.property.name];
}
}
else {
throw UnsupportedError('Member expressions only supported Map');
}
}