buildFieldsMap static method
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;
}