templator function
Implementation
String templator(String template, CentralDataRepository values, int? index) {
final RegExp regExp = RegExp(r'\{\{([^}]+)\}\}');
// logger.e("Inside templator with template: $template");
Map<String, String> parsePlaceholder(String placeholder) {
List<String> parts = placeholder.split(' ');
String key = parts[0].trim();
String defaultValue = parts.length > 1 ? parts.sublist(1).join(' ') : '';
return {'key': key, 'defaultValue': defaultValue};
}
final Map<String, Function(String, int? index)> keyHandlers = {
'U': (String mapKey, int? index) => values.userProps[mapKey],
'D': (String mapKey, int? idx) =>
values.subTasks?[index ?? idx ?? 0][mapKey],
'C': (String mapKey, int? index) => values.currentUser?[mapKey],
'R': (String mapKey, int? index) => values.rewardDetails?[mapKey],
};
String result = template.replaceAllMapped(regExp, (match) {
String placeholder = match.group(1)!.trim();
Map<String, String> parsed = parsePlaceholder(placeholder);
String key = parsed['key']!;
String defaultValue = parsed['defaultValue']!;
List<String> keyParts = key.split('.');
if (keyParts.length >= 2) {
String prefix = keyParts[0];
if (prefix == "D") {
String mapKey = keyParts.sublist(2).join('.') +
(defaultValue.isNotEmpty ? " $defaultValue" : '');
int idx = int.parse(keyParts[1]);
return keyHandlers[prefix]!(mapKey, idx) ?? defaultValue;
}
if (prefix == "L") {
if (keyParts[1] == 'l') {
return values.users?[index ?? 0][keyParts[2]] ?? defaultValue;
}
int indexKey = int.parse(keyParts[1]);
return values.users?[indexKey][keyParts[2]] ?? defaultValue;
}
String mapKey = keyParts.sublist(1).join('.');
log("Map Key: $mapKey");
if (keyHandlers.containsKey(prefix)) {
return keyHandlers[prefix]!(mapKey, 0) ?? defaultValue;
}
}
return values.subTasks?[index ?? 0][key] ?? defaultValue;
});
return result;
}