CodeBlanks Logo Icon CodeBlanks

Stream dinleme

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

main.dart
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

main.dart
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?

main.dart
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ı

Soru
var stream = Stream.fromIterable(['A', 'B', 'C']);
await stream.____(
  (data) => print(data),
  onDone: () => print('Bitti'),
).asFuture();
Cevap
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

Orta seviye bölümündeki tüm dersler