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.fromfără tip explicit (List.from(x)) și obțiiList<dynamic>, pierzând verificarea tipurilor. ScrieList<int>.from(x)sau foloseșteList.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.