Ce face Stream.takeWhile
takeWhile emite valorile cât timp testul returnează true. La primul false, închide stream-ul nou; valoarea care a picat testul nu este emisă.
skipWhile ignoră valorile de la început cât timp testul este adevărat. De la primul false încolo, emite totul, chiar dacă valori de mai târziu ar trece testul.
Parametri
| Parametru | Descriere |
|---|---|
test |
Funcția care decide până unde se iau sau se sar valorile. |
Ce returnează
Un Stream<T> nou.
Exemple
Exemplul 1: Citirea până la cuvântul „STOP”
Future<void> main() async {
final comenzi = Stream.fromIterable(['înainte', 'stânga', 'STOP', 'dreapta']);
await comenzi.takeWhile((c) => c != 'STOP').forEach((c) => print('execut: $c'));
}
Rezultat
execut: înainte
execut: stânga
Exemplul 2: skipWhile: ignoră încălzirea
Valorile sub 50 de la început sunt sărite. 40 de la final apare, pentru că skipWhile s-a oprit deja.
Future<void> main() async {
final turatii = Stream.fromIterable([10, 25, 48, 60, 75, 40]);
print(await turatii.skipWhile((t) => t < 50).toList());
}
Rezultat
[60, 75, 40]
Greșeli frecvente
- Folosești
takeWhileca filtru. După primulfalsenu mai vine nimic; pentru filtrare foloseștewhere.
Comenzi înrudite
Stream.take: take păstrează doar primele n valori și apoi închide stream-ul; skip sare peste primele n valori.Stream.where: Creează un stream nou care lasă să treacă doar valorile pentru care testul este adevărat.Iterable.takeWhile: takeWhile păstrează elementele de la început cât timp trec testul; skipWhile le sare cât timp trec testul.