CodeBlanks Logo Icon CodeBlanks

Birleştirme

Tüm katmanları birleştirerek çalışan bir uygulama yazarsın.

Birleştirme

Son adımda her şeyi birleştirip bir Stream ile görevleri yayınlarsın. Stream, asenkron bir veri akışıdır.

Stream<Task>.fromIterable(tasks) ile bir listeyi Stream'a çevirirsin. await for (var t in stream) ile dinlersin.

Bunun için main artık async olmalı: void main() async { ... }. Bu, await kullanmanın şartıdır.

Async main ve Stream

Tipik kullanım: void main() async { var stream = Stream<Task>.fromIterable(tasks); await for (var t in stream) { print(t.title); } }.

Stream.fromIterable listedeki her elemanı sırayla yayınlar. await for her değeri bekler ve işler; döngü Stream bitene kadar sürer.

Bu kalıp, dosya + koleksiyon + Stream'i birleştirir; gerçek bir konsol uygulamasının iskeletini verir.

Uygulama Stream ile görevleri yazdır

main'i async yap. var tasks = <Task>[Task('Kod yaz'), Task('Test yaz')]; tanımla. var file = File('tasks.txt'); ile dosya oluştur, file.writeAsStringSync(tasks.map((t) => t.title).join('\n')); ile yaz. var stream = Stream<Task>.fromIterable(tasks); ile Stream oluştur ve await for (var t in stream) { print(t.title); } ile her görevin başlığını yazdır.

Başlangıç kodu

main.dart
import 'dart:io';

abstract class Trackable {
  bool get isDone;
}

class Task implements Trackable {
  final String title;
  bool done;
  Task(this.title, {this.done = false});

  @override
  bool get isDone => done;
}

void main() {
  // tasks listesi oluştur, dosyaya yaz, Stream ile yazdır
}

Örnek çözüm

main.dart
import 'dart:io';

abstract class Trackable {
  bool get isDone;
}

class Task implements Trackable {
  final String title;
  bool done;
  Task(this.title, {this.done = false});

  @override
  bool get isDone => done;
}

void main() async {
  var tasks = <Task>[Task('Kod yaz'), Task('Test yaz')];
  var file = File('tasks.txt');
  file.writeAsStringSync(tasks.map((t) => t.title).join('\n'));
  var stream = Stream<Task>.fromIterable(tasks);
  await for (var t in stream) {
    print(t.title);
  }
}

Beklenen çıktı

Kod yaz
Test yaz

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Stream dinleme

Soru
await for (var t in ____) { print(t.title); }
Cevap
await for (var t in stream) { print(t.title); }

Açıklama: await for stream'i dinler.

2 Stream parçaları

Kavram Anlamı
Stream.fromIterable Listeyi Stream'a çevirir
await for Dinleme döngüsü
async Asenkron main
yield Değer yayınlama

3 Stream nasıl dinlenir?

  • for (var t in stream)
  • while (stream)
  • await for (var t in stream) Doğru cevap
  • stream.next()

Açıklama: await for bir Stream'i dinlemenin yoludur.

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