Map.of în Dart

Map.of face o copie modificabilă a unui map; Map.unmodifiable face o copie care nu mai poate fi schimbată.

Sintaxă
factory Map<K, V>.of(Map<K, V> other)
factory Map<K, V>.unmodifiable(Map<dynamic, dynamic> other)

Ce face Map.of

Map.of(alt) creează un map nou cu aceleași perechi. Schimbările în copie nu afectează originalul, iar tipurile cheilor și valorilor rămân aceleași ca în original.

Map.unmodifiable(alt) creează o copie care aruncă UnsupportedError la orice încercare de modificare (adăugare, ștergere, schimbarea unei valori). Este util când dai datele altui cod și nu vrei să fie modificate.

Copia este „superficială”: dacă valorile sunt liste sau alte obiecte, copia și originalul folosesc aceleași obiecte.

Parametri

Parametru Descriere
other Map-ul copiat.

Ce returnează

Un map nou: modificabil pentru of, nemodificabil pentru unmodifiable.

Exemple

Exemplul 1: Copie independentă

void main() {
  final original = {'Ana': 9, 'Mihai': 7};
  final copie = Map.of(original);
  copie['Mihai'] = 10;
  copie['Radu'] = 8;
  print('original: $original');
  print('copie:    $copie');
}

Rezultat

original: {Ana: 9, Mihai: 7}
copie:    {Ana: 9, Mihai: 10, Radu: 8}

Exemplul 2: Configurație care nu poate fi schimbată

void main() {
  final config = Map<String, String>.unmodifiable({'server': 'dexblog.ro', 'port': '443'});
  print(config['server']);
  try {
    config['port'] = '80';
  } on UnsupportedError catch (e) {
    print('Nu se poate: ${e.message}');
  }
}

Rezultat

dexblog.ro
Nu se poate: Cannot modify unmodifiable map

Greșeli frecvente

  • Scrii final copie = original; și crezi că ai o copie. Ambele nume arată spre același map; folosește Map.of sau {...original}.
  • Crezi că Map.unmodifiable blochează și listele din interior. Doar map-ul este blocat; listele din valori pot fi modificate în continuare.

Comenzi înrudite

  • Map: Colecție de perechi cheie–valoare: cauți rapid o valoare după cheia ei (nume, cod, oraș).
  • List.from: Creează o listă nouă cu elementele unei colecții; of verifică tipul la compilare, from la rulare.
  • List.empty: List.empty creează o listă goală; List.unmodifiable creează o copie care nu mai poate fi schimbată.
  • Set.from: Creează un set nou din elementele unei colecții; Set.of verifică tipul la compilare, Set.from la rulare.
  • UnmodifiableListView: O vedere doar pentru citire peste o listă: nu poate fi modificată, dar arată schimbările din lista originală.