Dart deep clone and recursive map merge
Dart
import 'dart:convert';
dynamic deepClone(dynamic value) {
if (value is Map || value is List) {
return jsonDecode(jsonEncode(value));
}
return value;
}
Map<String, dynamic> deepMerge(Map<String, dynamic> base, Map<String, dynamic> patch) {
final out = deepClone(base) as Map<String, dynamic>;
for (final entry in patch.entries) {
final old = out[entry.key];
final next = entry.value;
if (old is Map<String, dynamic> && next is Map<String, dynamic>) {
out[entry.key] = deepMerge(old, next);
} else {
out[entry.key] = deepClone(next);
}
}
return out;
}