Ce face StreamSubscription.asFuture
asFuture înlocuiește onDone și onError ale abonamentului: future-ul se termină cu futureValue când stream-ul se închide, sau cu prima eroare (după care abonamentul este anulat).
Este un mod scurt de a aștepta finalul unui stream ascultat cu listen. Dacă vrei să tratezi erorile fără să oprești ascultarea, nu folosi asFuture, ci onDone cu un Completer.
Parametri
| Parametru | Descriere |
|---|---|
futureValue |
Opțional: valoarea cu care se termină future-ul la finalul stream-ului. |
Ce returnează
Un Future<E>.
Exemple
Exemplul 1: Așteaptă finalul unui listen
Future<void> main() async {
var total = 0;
final abonament = Stream.fromIterable([150, 230, 75]).listen((suma) => total += suma);
final mesaj = await abonament.asFuture('toate plățile au fost procesate');
print(mesaj);
print('Total: $total lei');
}
Rezultat
toate plățile au fost procesate
Total: 455 lei
Exemplul 2: Prima eroare termină future-ul
Stream<int> plati() async* {
yield 100;
throw StateError('card refuzat');
}
Future<void> main() async {
final abonament = plati().listen((p) => print('plată: $p lei'));
try {
await abonament.asFuture<void>();
} on StateError catch (e) {
print('Oprit: ${e.message}');
}
}
Rezultat
plată: 100 lei
Oprit: card refuzat
Greșeli frecvente
- Dai
onErrorlalistenși apoi chemiasFuture.asFutureînlocuiește funcția ta, iar prima eroare oprește tot.
Comenzi înrudite
StreamSubscription: Abonamentul returnat de listen; prin el pui pauză, reiei sau anulezi ascultarea unui stream (cancel).Stream.listen: Începe ascultarea unui stream: o funcție pentru fiecare valoare, una pentru erori, una pentru final.Stream.drain: drain consumă și aruncă toate valorile stream-ului; pipe trimite toate valorile către un StreamConsumer (de ex. un controller).StreamSubscription.onData: Înlocuiesc funcțiile unui abonament existent: cea pentru date, cea pentru erori și cea pentru final.