buildFieldsMap static method

FutureOr<Map<String, Object>> buildFieldsMap(
  1. Map<String, ASTClassField> fields, {
  2. VMContext? context,
  3. Map<String, ASTValue>? fieldOverwrite,
})

Builds a Map<String,Object> with the fields names and values.

Implementation

static FutureOr<Map<String, Object>> buildFieldsMap(
    Map<String, ASTClassField> fields,
    {VMContext? context,
    Map<String, ASTValue>? fieldOverwrite}) async {
  var astRunStatus = ASTRunStatus();

  var fieldsEntriesFuture = fields.values.map((f) async {
    if (f is ASTClassFieldWithInitialValue) {
      var initialValueFuture = context != null
          ? f.getInitialValue(context, astRunStatus)
          : f.getInitialValueNoContext();

      var initialValue = await initialValueFuture;

      var value = (await initialValue.getValueNoContext()) as Object?;
      return MapEntry(f.name, value ?? Null);
    } else {
      return MapEntry(f.name, f.type);
    }
  }).toList();

  var fieldsEntries = await Future.wait(fieldsEntriesFuture);

  var map = Map<String, Object>.fromEntries(fieldsEntries);

  if (fieldOverwrite != null && fieldOverwrite.isNotEmpty) {
    context ??= VMContext(ASTBlock(null));
    for (var entry in fieldOverwrite.entries) {
      var value = await entry.value.getValue(context);
      map[entry.key] = value ?? Null;
    }
  }

  return map;
}