replaceStringTemplate function

String replaceStringTemplate(
  1. String value,
  2. Map<String, dynamic> data
)

Implementation

String replaceStringTemplate(String value, Map<String, dynamic> data) {
  return value.replaceAllMapped(RegExp(r'{(.*?)}', caseSensitive: false),
      (match) {
    var x = match.group(1) ?? '';
    if (x.isEmpty) return '';

    x = x.trim();
    if (!x.startsWith('\$.')) {
      if (data.containsKey(x)) {
        return data[x].toString();
      }
      return '';
    }
    var parts = x.substring(2).split('.');
    var currentMap = data;
    for (var part in parts) {
      if (!currentMap.containsKey(part)) {
        return '';
      }
      var m = currentMap[part];
      if (!(m is Map<String, dynamic>)) {
        return m;
      }
      currentMap = m;
    }
    return '';
  });
  /*for (String k in data.keys) {
    if (data[k] is String) {
      value = value.replaceAll('{$k}', data[k]!);
    } else if (data[k] is Map) {
      Map subData = data[k];
      for (String sk in subData.keys) {
        String replaceString = '{$.$k.$sk}';
        value = value.replaceAll(replaceString, subData[sk].toString());
      }
    }
  }
  return value;*/
}