write static method

void write(
  1. dynamic data,
  2. String? tag,
  3. dynamic value
)

Implementation

static void write(dynamic data, String? tag, dynamic value) {
  // get segments
  DotNotation? segments = DotNotation.fromString(tag);
  if (segments == null || segments.isEmpty) return;

  // build map segments
  for (int i = 0; i < segments.length - 1; i++) {
    var property = segments[i];
    if (data is Map) {
      if (property.offset > 0) {
        data = null;
        break;
      }
      if (!data.containsKey(property.name)) data[property.name] = "";
      data = data[property.name];
    }
    if (data is List) {
      if (property.offset > data.length) {
        data = null;
        break;
      }
      if (property.offset < data.length && property.offset >= 0) {
        data = data[property.offset];
      }
    }
  }

  // single element list
  // added by olajos 16 nov 2023
  if (data is List && data.length == 1 && data[0] is Map) {
    data = data[0];
  }

  // write the value
  var name = segments.last.name;
  if (data is Map) {
    data[name] = value;
  }
}