deepMerge method

Map<K, dynamic> deepMerge(
  1. Map<K, dynamic> other
)

Recursively merges other into this map, returning a new Map.

For keys present in both maps with map values, the merge is recursive. For all other keys, other's value takes precedence.

final a = {'x': 1, 'y': {'a': 1}};
final b = {'y': {'b': 2}, 'z': 3};
a.deepMerge(b);
// {'x': 1, 'y': {'a': 1, 'b': 2}, 'z': 3}

Implementation

Map<K, dynamic> deepMerge(Map<K, dynamic> other) {
  final result = <K, dynamic>{};
  for (final entry in entries) {
    result[entry.key] = entry.value;
  }
  for (final entry in other.entries) {
    if (result.containsKey(entry.key) && result[entry.key] is Map && entry.value is Map<dynamic, dynamic>) {
      result[entry.key] = (result[entry.key] as Map).deepMerge(entry.value as Map<dynamic, dynamic>);
    } else {
      result[entry.key] = entry.value;
    }
  }
  return result;
}