set static method
Sets value at key in map, creating nested maps along the path.
Mutates map in place and returns it for chaining.
Existing Lists encountered along the path are traversed by integer
segment (e.g. 'users.0.name'); Lists are not auto-created. Existing
non-collection intermediates (e.g. an int or String) are left in place
and the call becomes a no-op so that data isn't silently destroyed.
Implementation
static Map set(Map map, String key, dynamic value) {
if (key.isEmpty) return map;
final segments = key.split('.');
dynamic current = map;
for (var i = 0; i < segments.length - 1; i++) {
final s = segments[i];
if (current is Map) {
final next = current[s];
if (next is Map || next is List) {
current = next;
} else if (next == null) {
final fresh = <String, dynamic>{};
current[s] = fresh;
current = fresh;
} else {
return map;
}
} else if (current is List) {
final idx = int.tryParse(s);
if (idx == null || idx < 0 || idx >= current.length) return map;
current = current[idx];
} else {
return map;
}
}
final last = segments.last;
if (current is Map) {
current[last] = value;
} else if (current is List) {
final idx = int.tryParse(last);
if (idx != null && idx >= 0 && idx < current.length) {
current[idx] = value;
}
}
return map;
}