List.from în Dart

List: liste Dart 2.0

Creează o listă nouă cu elementele unei colecții; of verifică tipul la compilare, from la rulare.

Sintaxă
List<E>.from(Iterable elements, {bool growable = true})
List<E>.of(Iterable<E> elements, {bool growable = true})

Ce face List.from

Ambele constructoare copiază elementele unui iterable într-o listă nouă, extensibilă (sau fixă, cu growable: false). Lista nouă este independentă de sursă.

List.of cere ca elementele să aibă deja tipul E, iar compilatorul verifică asta. List.from acceptă orice iterable și verifică fiecare element abia la rulare, deci poate „îngusta” tipul (din List<Object> în List<String>), dar poate da erori la rulare. Preferă List.of sau toList() când tipurile se potrivesc.

Parametri

Parametru Descriere
elements Colecția copiată.
growable false pentru o listă de lungime fixă.

Ce returnează

O List<E> nouă.

Exemple

Exemplul 1: Copii independente

void main() {
  final orase = {'Iași', 'Cluj', 'Sibiu'};
  final lista = List.of(orase);
  lista.add('Arad');
  print(lista);
  print('set-ul rămâne: $orase');

  final note = [9, 10];
  final copie = List<int>.from(note)..add(7);
  print('$note / $copie');
}

Rezultat

[Iași, Cluj, Sibiu, Arad]
set-ul rămâne: {Iași, Cluj, Sibiu}
[9, 10] / [9, 10, 7]

Exemplul 2: from îngustează tipul la rulare

void main() {
  final List<Object> amestec = ['Ana', 'Mihai'];
  final nume = List<String>.from(amestec);
  print(nume.map((n) => n.toUpperCase()).toList());

  final List<Object> gresit = ['Ana', 7];
  try {
    List<String>.from(gresit);
  } on TypeError {
    print('TypeError: 7 nu este String');
  }
}

Rezultat

[ANA, MIHAI]
TypeError: 7 nu este String

Greșeli frecvente

  • Folosești List.from fără tip explicit (List.from(x)) și obții List<dynamic>, pierzând verificarea tipurilor. Scrie List<int>.from(x) sau folosește List.of.

Comenzi înrudite

  • Iterable.toList: toList copiază elementele într-o listă nouă; toSet le copiază într-un set nou, fără duplicate.
  • List.filled: List.filled creează o listă cu aceeași valoare pe fiecare poziție; List.generate calculează fiecare element din poziția lui.
  • 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.