mergeMaps function
Recursively merges modification
into base
.
In other words, whenever there is a conflict over the value of a key path,
modification
's value for that key path is selected.
Implementation
Map<String, Object> mergeMaps(
Map<String, Object> base,
Map<String, Object> modification,
) {
final Map<String, Object> result = <String, Object>{};
for (final MapEntry<String, Object> entry in modification.entries) {
if (base.containsKey(entry.key)) {
final Object entryValue = entry.value;
if (entryValue is Map<String, Object>) {
assert(base[entry.key] is Map<String, Object>);
result[entry.key] =
mergeMaps((base[entry.key] as Map<String, Object>?)!, entryValue);
} else {
result[entry.key] = entry.value;
}
} else {
result[entry.key] = entry.value;
}
}
for (final MapEntry<String, Object> entry in base.entries) {
if (!result.containsKey(entry.key)) {
result[entry.key] = entry.value;
}
}
return result;
}