Stream.where în Dart

Creează un stream nou care lasă să treacă doar valorile pentru care testul este adevărat.

Sintaxă
Stream<T> where(bool test(T event))

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 where să se oprească la primul element care nu trece testul. Asta face takeWhile; where verifică 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.