deepMergeMaps function
map1 has priority over map2.
Implementation
Map<String, dynamic> deepMergeMaps(
Map<String, dynamic> map1,
Map<String, dynamic> map2, {
bool mergeInnerMaps = true,
}) {
final result = <String, dynamic>{};
for (final mapEntry in [...map1.entries, ...map2.entries]) {
if (!result.containsKey(mapEntry.key)) {
result[mapEntry.key] = mapEntry.value;
continue;
}
if (result[mapEntry.key] is Map) {
if (mapEntry.value is! Map) {
throw Exception(
'Tried to merge ${result[mapEntry.key].runtimeType} and ${mapEntry.value.runtimeType}',
);
}
if (mergeInnerMaps) {
result[mapEntry.key] = deepMergeMaps(
result[mapEntry.key],
mapEntry.value,
);
} else {
result[mapEntry.key] = mapEntry.value;
}
}
}
return result;
}