Ce face StreamSubscription.pause
pause() cere stream-ului să nu mai trimită evenimente. La un stream obișnuit, evenimentele produse între timp sunt păstrate și sosesc după resume(); nu se pierd. Dacă dai un future la pause, abonamentul se reia singur când acel future se termină.
Pauzele se adună: dacă ai chemat pause de două ori, trebuie să chemi resume tot de două ori. isPaused este true cât timp există cel puțin o pauză.
Parametri
| Parametru | Descriere |
|---|---|
resumeSignal |
Opțional: un future după care abonamentul se reia automat. |
Ce returnează
pause și resume nu returnează nimic; isPaused returnează bool.
Exemple
Exemplul 1: Pauză în timpul unui apel
import 'dart:async';
Future<void> main() async {
final c = StreamController<String>();
final abonament = c.stream.listen((m) => print('notificare: $m'));
c.add('Mesaj de la Ana');
await Future.delayed(Duration.zero);
abonament.pause();
print('în apel, isPaused = ${abonament.isPaused}');
c.add('Mesaj de la Mihai');
c.add('Mesaj de la Ioana');
await Future.delayed(const Duration(milliseconds: 20));
print('apel încheiat');
abonament.resume();
await Future.delayed(Duration.zero);
await c.close();
}
Rezultat
notificare: Mesaj de la Ana
în apel, isPaused = true
apel încheiat
notificare: Mesaj de la Mihai
notificare: Mesaj de la Ioana
Exemplul 2: Reluare automată cu resumeSignal
import 'dart:async';
Future<void> main() async {
final gata = Completer<void>();
final abonament = Stream.fromIterable([1, 2, 3]).listen(null, onDone: gata.complete);
abonament.onData((n) {
print('procesez $n');
if (n == 1) {
print(' pauză 30 ms');
abonament.pause(Future.delayed(const Duration(milliseconds: 30)));
}
});
await gata.future;
}
Rezultat
procesez 1
pauză 30 ms
procesez 2
procesez 3
Greșeli frecvente
- Pui pauză pe un abonament la un stream broadcast și te aștepți ca evenimentele să fie păstrate. La broadcast, evenimentele din timpul pauzei se pot pierde pentru acel ascultător.
- Chemi
pausede mai multe ori șiresumeo singură dată. Abonamentul rămâne în pauză.
Comenzi înrudite
StreamSubscription: Abonamentul returnat de listen; prin el pui pauză, reiei sau anulezi ascultarea unui stream (cancel).StreamSubscription.onData: Înlocuiesc funcțiile unui abonament existent: cea pentru date, cea pentru erori și cea pentru final.StreamController: Creează un stream pe care îl alimentezi tu: ce pui cu add ajunge la cei care ascultă controller.stream.