evalMemberExpression method

  1. @override
dynamic evalMemberExpression(
  1. MemberExpression expression,
  2. 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');
  }
}