Ce face Stream.firstWhere
firstWhere ascultă stream-ul până găsește o valoare pentru care testul este adevărat, apoi anulează ascultarea și dă acea valoare.
Dacă stream-ul se închide fără nicio potrivire, se folosește orElse; fără orElse, future-ul se termină cu StateError.
Parametri
| Parametru | Descriere |
|---|---|
test |
Condiția căutată. |
orElse |
Opțional: valoarea de rezervă când nu există potrivire. |
Ce returnează
Un Future<T>.
Exemple
Exemplul 1: Primul loc liber în parcare
Stream<(int, bool)> locuri() async* {
for (final loc in [(1, false), (2, false), (3, true), (4, true)]) {
await Future.delayed(const Duration(milliseconds: 5));
print(' verific locul ${loc.$1}');
yield loc;
}
}
Future<void> main() async {
final liber = await locuri().firstWhere((l) => l.$2);
print('Parchează pe locul ${liber.$1}');
}
Rezultat
verific locul 1
verific locul 2
verific locul 3
Parchează pe locul 3
Exemplul 2: Valoare de rezervă cu orElse
Future<void> main() async {
final note = Stream.fromIterable([6, 7, 8]);
final zece = await note.firstWhere((n) => n == 10, orElse: () => -1);
print(zece == -1 ? 'Nimeni nu a luat 10' : 'Primul 10: $zece');
}
Rezultat
Nimeni nu a luat 10
Greșeli frecvente
- Nu dai
orElseși nu există potrivire: apareStateError: No element.
Comenzi înrudite
Stream.first: first, last, single și elementAt dau un Future cu o anumită valoare din stream: prima, ultima, singura sau a n-a.Stream.any: any verifică dacă vreo valoare trece testul, every dacă toate îl trec, contains dacă o anumită valoare apare.Iterable.firstWhere: Găsește primul, ultimul sau singurul element care trece un test, cu o valoare de rezervă opțională (orElse).