Ce face UnmodifiableListView
UnmodifiableListView(lista) nu copiază elementele, ci învelește lista originală. Prin vedere poți citi ([i], length, for-in), dar orice încercare de modificare aruncă UnsupportedError.
Pentru că nu este o copie, schimbările făcute în lista originală se văd imediat prin vedere. Este modul obișnuit de a expune o listă internă a unei clase fără ca restul codului să o poată schimba.
Diferența față de List.unmodifiable: aceea face o copie (nu mai vede schimbările ulterioare); vederea nu copiază nimic.
Parametri
| Parametru | Descriere |
|---|---|
source |
Lista (sau iterable-ul) învelită. |
Ce returnează
O listă nemodificabilă legată de sursă.
Exemple
Exemplul 1: Lista internă a unei clase
import 'dart:collection';
class Catalog {
final _elevi = <String>[];
UnmodifiableListView<String> get elevi => UnmodifiableListView(_elevi);
void inscrie(String nume) => _elevi.add(nume);
}
void main() {
final c = Catalog();
final vedere = c.elevi;
c.inscrie('Ana');
c.inscrie('Mihai');
print('Vederea vede: $vedere, lungime ${vedere.length}');
try {
vedere.add('Hacker');
} on UnsupportedError catch (e) {
print('Nu se poate: ${e.message}');
}
}
Rezultat
Vederea vede: [Ana, Mihai], lungime 2
Nu se poate: Cannot add to an unmodifiable list
Exemplul 2: Vedere față de copie nemodificabilă
import 'dart:collection';
void main() {
final orase = ['Iași', 'Cluj'];
final vedere = UnmodifiableListView(orase);
final copie = List.unmodifiable(orase);
orase.add('Sibiu');
print('vedere: $vedere');
print('copie: $copie');
}
Rezultat
vedere: [Iași, Cluj, Sibiu]
copie: [Iași, Cluj]
Greșeli frecvente
- Crezi că vederea „îngheață” datele. Lista originală poate fi schimbată în continuare, iar vederea arată schimbările; pentru o fotografie fixă folosește
List.unmodifiable.
Comenzi înrudite
List.empty: List.empty creează o listă goală; List.unmodifiable creează o copie care nu mai poate fi schimbată.Map.of: Map.of face o copie modificabilă a unui map; Map.unmodifiable face o copie care nu mai poate fi schimbată.List: Lista din Dart: elemente în ordine, accesate după poziție, care poate crește sau scădea.