List în Dart

List: liste Dart 2.0

Lista din Dart: elemente în ordine, accesate după poziție, care poate crește sau scădea.

Sintaxă
abstract interface class List<E> implements Iterable<E>

var lista = <E>[e1, e2, e3];
List<E> lista = [];

Ce face List

List<E> este colecția folosită cel mai des: elementele stau în ordine, de la poziția 0 la length - 1, iar lista[i] le citește direct. Cel mai simplu o creezi cu un literal: [1, 2, 3] sau <String>[] pentru o listă goală de texte.

O listă creată cu literal sau cu [] este extensibilă: add, insert și remove îi schimbă lungimea. Există și liste de lungime fixă (List.filled, toList(growable: false)) și liste nemodificabile (const [...], List.unmodifiable).

Literalul de listă acceptă if, for și ... (spread) în interior, ceea ce face ușoară construirea listelor din alte date. List are toate metodele lui Iterable (map, where, join…).

Ce returnează

Un obiect List. Metodele lui au pagini separate.

Exemple

Exemplul 1: Creare, citire și modificare

void main() {
  final orase = ['Iași', 'Cluj', 'Brașov'];
  final note = <int>[];
  note.add(9);
  note.add(10);

  print(orase);
  print('primul: ${orase[0]}, ultimul: ${orase[orase.length - 1]}');
  orase[1] = 'Cluj-Napoca';
  print(orase);
  print('note: $note (${note.length})');
}

Rezultat

[Iași, Cluj, Brașov]
primul: Iași, ultimul: Brașov
[Iași, Cluj-Napoca, Brașov]
note: [9, 10] (2)

Exemplul 2: if, for și spread în literal

void main() {
  const esteWeekend = true;
  final baza = ['pâine', 'lapte'];
  final cumparaturi = [
    ...baza,
    if (esteWeekend) 'prăjitură',
    for (var i = 1; i <= 2; i++) 'sticlă de apă $i',
  ];
  print(cumparaturi);
}

Rezultat

[pâine, lapte, prăjitură, sticlă de apă 1, sticlă de apă 2]

Exemplul 3: Liste de lungime fixă și nemodificabile

void main() {
  const zile = ['luni', 'marți', 'miercuri'];
  try {
    zile.add('joi');
  } on UnsupportedError catch (e) {
    print('const: ${e.message}');
  }
  final scoruri = List.filled(3, 0);
  scoruri[0] = 7;
  print(scoruri);
  try {
    scoruri.add(1);
  } on UnsupportedError catch (e) {
    print('fixă: ${e.message}');
  }
}

Rezultat

const: Cannot add to an unmodifiable list
[7, 0, 0]
fixă: Cannot add to a fixed-length list

Greșeli frecvente

  • Citești lista[lista.length] sau lista[0] pe o listă goală: apare RangeError. Ultimul element este la length - 1.
  • Declari o listă cu final și crezi că nu mai poate fi modificată. final blochează doar variabila; conținutul se schimbă în continuare. Pentru conținut fix folosește const sau List.unmodifiable.

Comenzi înrudite

  • List.add: add adaugă un element la sfârșitul listei; addAll adaugă toate elementele unei alte colecții.
  • List.operator[]: lista[i] citește elementul de pe poziția i; lista[i] = x îl înlocuiește.
  • List.filled: List.filled creează o listă cu aceeași valoare pe fiecare poziție; List.generate calculează fiecare element din poziția lui.
  • Iterable: Tipul de bază pentru orice colecție care poate fi parcursă element cu element: List, Set, cheile unui Map.
  • Map: Colecție de perechi cheie–valoare: cauți rapid o valoare după cheia ei (nume, cod, oraș).
  • Set: Colecție fără elemente duplicate: fiecare valoare apare o singură dată, iar căutarea este rapidă.