Ce face Stream.where
where verifică fiecare valoare cu funcția de test și o emite mai departe doar dacă rezultatul este true. Erorile și închiderea trec neschimbate.
Pentru a păstra doar valorile de un anumit tip dintr-un stream amestecat, poți combina where((e) => e is T) cu cast<T>().
Parametri
| Parametru | Descriere |
|---|---|
test |
Funcția care decide dacă valoarea trece. |
Ce returnează
Un Stream<T> nou, cu valorile filtrate.
Exemple
Exemplul 1: Doar tranzacțiile mari
Future<void> main() async {
final plati = Stream.fromIterable([120, 4500, 80, 12000, 650]);
await for (final suma in plati.where((s) => s >= 1000)) {
print('Verificare manuală pentru $suma lei');
}
}
Rezultat
Verificare manuală pentru 4500 lei
Verificare manuală pentru 12000 lei
Exemplul 2: Mesaje dintr-un anumit oraș
Future<void> main() async {
final anunturi = Stream.fromIterable([
('Iași', 'Trafic blocat pe Copou'),
('Cluj', 'Concert în Piața Unirii'),
('Iași', 'Ploaie după-amiază'),
]);
final dinIasi = anunturi.where((a) => a.$1 == 'Iași').map((a) => a.$2);
print(await dinIasi.toList());
}
Rezultat
[Trafic blocat pe Copou, Ploaie după-amiază]
Greșeli frecvente
- Te aștepți ca
wheresă se oprească la primul element care nu trece testul. Asta facetakeWhile;whereverifică toate valorile.
Comenzi înrudite
Stream.map: Creează un stream nou în care fiecare valoare este transformată cu o funcție sincronă.Stream.takeWhile: takeWhile emite valori cât timp testul este adevărat și apoi se închide; skipWhile sare peste ele până la primul fals.Stream.firstWhere: Dă un Future cu prima valoare din stream care trece testul; cu orElse, o valoare de rezervă dacă nu există.Iterable.where: Păstrează doar elementele care trec un test; whereType păstrează doar elementele de un anumit tip.