Learn
← Previous Next →

Hari 12: Stream & Reactive Programming

60 min Last updated 09 Apr 2026

Apa itu Stream?

Stream adalah sequence of asynchronous events — seperti Future tapi bisa menghasilkan banyak nilai, bukan hanya satu. Cocok untuk real-time data: sensor, WebSocket, live updates.

Stream hitungMundur(int dari) async* {
  for (int i = dari; i >= 0; i--) {
    await Future.delayed(Duration(milliseconds: 300));
    yield i;
  }
}

void main() async {
  print("Hitung mundur:");
  await for (int n in hitungMundur(5)) {
    print(n);
  }
  print("GO!");
}

StreamController

import "dart:async";

void main() async {
  StreamController controller = StreamController();

  // Listen sebelum mengirim data
  controller.stream.listen(
    (data) => print("Diterima: $data"),
    onError: (e) => print("Error: $e"),
    onDone: () => print("Stream selesai"),
  );

  controller.add("Pesan 1");
  controller.add("Pesan 2");
  controller.add("Pesan 3");
  await Future.delayed(Duration(milliseconds: 100));
  controller.close();
}

Stream Transformers

Stream angka() async* {
  for (int i = 1; i <= 10; i++) {
    yield i;
  }
}

void main() async {
  await angka()
    .where((n) => n % 2 == 0)    // filter genap
    .map((n) => n * n)            // kuadratkan
    .listen((n) => print(n));    // 4, 16, 36, 64, 100
}

💡 Notice: async* dan yield digunakan untuk membuat generator stream. await for untuk mengkonsumsi stream.

Assignment

Buat Stream generator deret Fibonacci dengan async* dan yield.

Expected output:

Deret Fibonacci:
0
1
1
2
3
5
8
13
Dart main.dart
Solution
Output