apply method
Implementation
@override
Future<String> apply(String content, Map<String, dynamic> context) async {
return content.replaceAllMapped(_foreachRegex, (match) {
final arrayName = match.group(1)!;
final valueVar = match.group(2)!;
final keyVar = match.group(3);
final loopBody = match.group(4)!;
final array = context[arrayName];
if (array is! List && array is! Map) {
return '';
}
final buffer = StringBuffer();
if (array is List) {
for (var i = 0; i < array.length; i++) {
var rendered = loopBody;
final item = array[i];
// Replace value variable
rendered = _replaceVariable(rendered, valueVar, item.toString());
// Replace key variable (index)
if (keyVar != null) {
rendered = _replaceVariable(rendered, keyVar, i.toString());
}
buffer.write(rendered);
}
} else if (array is Map) {
array.forEach((key, value) {
var rendered = loopBody;
// Replace value variable
rendered = _replaceVariable(rendered, valueVar, value.toString());
// Replace key variable
if (keyVar != null) {
rendered = _replaceVariable(rendered, keyVar, key.toString());
}
buffer.write(rendered);
});
}
return buffer.toString();
});
}