Stream dinleme
- Dart kursu
- Orta seviye
- Ders 65/116
- 5 dk
listen ile Stream dinlemeyi öğrenirsin.
listen metodu
listen metodu bir Stream'e abone olur. Her olay geldiğinde bir geri çağırma (callback) çalışır. await for'a alternatiftir; daha çok denetim sağlar.
Örnek: stream.listen((data) => print(data));. Her olay data parametresine gelir ve yazdırılır. onDone ile akış bittiğinde çalışacak kod verirsin.
listen bir StreamSubscription döndürür. .asFuture() ile akışın bitmesini bekleyen bir Future alırsın; await ile bunu beklersin.
Dinleme akışı
listen ile bir Stream'e abone olduğunda olaylar art arda gelir. Her olay onData callback'ine iletilir. Tüm olaylar bittiğinde onDone çalışır.
Örnek: Stream.fromIterable(['A', 'B', 'C']) üç olay gönderir. listen((data) => print(data), onDone: () => print('Bitti')) önce A, B, C yazdırır, sonra Bitti.
.asFuture() ile await kullanırsan main, akış tamamlanana kadar bekler. Bu, çıktının belirleyici olmasını sağlar.
Uygulama listen ile dinle ve bitir
void main() async zaten yazılı. Stream.fromIterable(['A', 'B', 'C']) zaten oluşturuldu. stream.listen çağır: (data) => print(data) ile her olayı yazdır, onDone: () => print('Bitti') ile bitişi yazdır. Sonuna .asFuture() ekle ve await ile bekle.
Başlangıç kodu
void main() async {
var stream = Stream.fromIterable(['A', 'B', 'C']);
// .listen ile dinle, onDone ile bitişte yazdır, asFuture ile bekle
}Örnek çözüm
void main() async {
var stream = Stream.fromIterable(['A', 'B', 'C']);
await stream.listen(
(data) => print(data),
onDone: () => print('Bitti'),
).asFuture();
}Beklenen çıktı
A B C Bitti
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 onDone ne zaman çalışır?
stream.listen(
(data) => print(data),
onDone: () => print('Bitti'),
);- Stream kapanınca Doğru cevap
- Yalnızca hata durumunda
- Her olayda
- Asla
Açıklama: onDone Stream tamamlandığında çalışır.
2 listen çağrısı
var stream = Stream.fromIterable(['A', 'B', 'C']);
await stream.____(
(data) => print(data),
onDone: () => print('Bitti'),
).asFuture();
var stream = Stream.fromIterable(['A', 'B', 'C']);
await stream.listen(
(data) => print(data),
onDone: () => print('Bitti'),
).asFuture();
Açıklama: listen ile Stream'e abone olunur.
3 listen parçalarını eşleştir
| Kavram | Anlamı |
|---|---|
(data) => print(data) |
Olay işleyici |
onDone: () => ... |
Bitiş işleyici |
.asFuture() |
Bitirme beklemesi |
await |
Tamamlanmayı bekle |