processAsync method
Future<String>
processAsync({
- Map context = const {},
- List<
MemberAccessor> memberAccessors = const [],
Evaluates the template into a string result asynchronously. The template may have multiple expressions which will be concatenated into the returned value.
Implementation
Future<String> processAsync({
Map<dynamic, dynamic> context = const {},
List<MemberAccessor<dynamic>> memberAccessors = const [],
}) async {
final ctx = <String, Object>{};
for (var entry in context.entries) {
if (entry.key != null && entry.value != null) {
ctx[entry.key.toString()] = entry.value;
}
}
final prepared = _prepare();
var data = prepared.data;
final evaluator = ExpressionEvaluator.async(
memberAccessors: memberAccessors,
);
for (var entry in prepared.entries) {
try {
final evaled = await evaluator
.eval(
Expression.parse(entry.content),
ctx,
)
.first;
data = entry.replace(
data,
evaled == null ? '' : evaled.toString().trim(),
);
} catch (e, stack) {
_logger.severe('Unable to parse input: [${entry.content}]', e, stack);
rethrow;
}
}
return data;
}