Ce face Stream.toList
toList() ascultă stream-ul până la închidere și dă o listă cu toate valorile, în ordinea sosirii. toSet() face la fel, dar elimină duplicatele.
Dacă stream-ul emite o eroare, future-ul se termină cu acea eroare. Pe un stream infinit nu se termină niciodată; limitează-l întâi cu take.
Ce returnează
Future<List<T>>, respectiv Future<Set<T>>.
Exemple
Exemplul 1: Toate mesajele într-o listă
Stream<String> chat() async* {
yield 'Ana: Salut!';
await Future.delayed(const Duration(milliseconds: 10));
yield 'Mihai: Bună, ce faci?';
yield 'Ana: Bine, mersi.';
}
Future<void> main() async {
final mesaje = await chat().toList();
print('${mesaje.length} mesaje');
mesaje.forEach(print);
}
Rezultat
3 mesaje
Ana: Salut!
Mihai: Bună, ce faci?
Ana: Bine, mersi.
Exemplul 2: Vizitatori unici cu toSet
Future<void> main() async {
final vizite = Stream.fromIterable(['ana', 'radu', 'ana', 'ioana', 'radu']);
final unici = await vizite.toSet();
print('Vizitatori unici: $unici');
}
Rezultat
Vizitatori unici: {ana, radu, ioana}
Greșeli frecvente
- Folosești
toList()peStream.periodicfărătake. Programul așteaptă la nesfârșit.
Comenzi înrudite
Stream.length: length numără valorile până la închiderea stream-ului; isEmpty spune dacă stream-ul nu are nicio valoare.Stream.fold: Combină toate valorile stream-ului într-un singur rezultat (sumă, maxim, text); fold pornește de la o valoare dată.Iterable.toList: toList copiază elementele într-o listă nouă; toSet le copiază într-un set nou, fără duplicate.Stream.take: take păstrează doar primele n valori și apoi închide stream-ul; skip sare peste primele n valori.