Birleştirme
- Dart kursu
- Orta seviye
- Ders 116/116
- 6 dk
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
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
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
await for (var t in ____) { print(t.title); }
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.