cloneMap<K, V> method

  1. @override
Map<K, dynamic> cloneMap<K, V>(
  1. Map<K, V> source
)
override

Return an untyped Map<K, dynamic> with values deep-cloned.

The returned map's values are cloned without attempting typed casts; use this when map values may be heterogeneous or contain nested plain maps.

Preserves the concrete Map implementation (e.g. LinkedHashMap, HashMap, UnmodifiableMapView).

Implementation

@override
Map<K, dynamic> cloneMap<K, V>(Map<K, V> source) {
  final isUnmodifiable = source is UnmodifiableMapView<K, V>;
  final entries = source.entries.map(
    (e) => MapEntry<K, dynamic>(e.key, cloneValue(e.value)),
  );
  final Map<K, dynamic> cloned = switch (source) {
    LinkedHashMap<K, V>() => LinkedHashMap<K, dynamic>.fromEntries(entries),
    HashMap<K, V>() => HashMap<K, dynamic>.fromEntries(entries),
    _ => Map<K, dynamic>.fromEntries(entries),
  };
  return isUnmodifiable ? UnmodifiableMapView<K, dynamic>(cloned) : cloned;
}