Middle
Flutter'da akışlar nasıl kullanılır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Flutter'da akışlar, asenkron olay dizileriyle çalışmak için kullanılır. Reaktif programlama paradigmasına dayanır ve gelen verileri işlemeyi sağlar.
Akışların temel kullanımları:
- UI güncellemeleri: Veri değişikliklerini dinleme (örneğin, ağ istekleri veya veritabanlarından) ve widget'ları otomatik olarak güncelleme.
- BLoC/Cubit ve UI arasındaki iletişim: BLoC/Cubit, durumları yaymak için
Stream(StateStreamable aracılığıyla) kullanır ve UI bunlara abone olur. - Kullanıcı girişlerinin işlenmesi: Giriş olaylarını izleme (örneğin, metin alanlarından).
- WebSocket ve diğer asenkron işlemlerle çalışma: Gerçek zamanlı veri alma.
Ana kavramlar:
- Stream: Asenkron olay dizisi.
- StreamController: Akışı yönetir, veri ekleme (
add), hata ekleme (addError) ve akışı kapatma (close) sağlar. - StreamSubscription: Aktif bir abone temsil eden nesne. Veri alma (
onData), hata işleme (onError) ve akışı sonlandırma (onDone) sağlar.
StreamBuilder ile kullanım örneği:
// Diyelim ki, tamsayılar emite eden bir akışımız var
Stream<int> countStream = Stream.periodic(Duration(seconds: 1), (count) => count);
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return StreamBuilder<int>(
stream: countStream, // Akışa abone ol
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator(); // Akış veri beklerken
} else if (snapshot.hasError) {
return Text('Hata: ${snapshot.error}'); // Hata durumunda
} else {
return Text('Count: ${snapshot.data}'); // En son veriyi göster
}
},
);
}
}
Akışlar:
- Single-subscription: Sadece bir dinleyici herhangi bir zamanda abone olabilir. İkinci bir abone olmaya çalışmak hata verir.
- Broadcast: Birden fazla dinleyici aynı akışa abone olabilir. Veriler tüm aktif dinleyicilere gönderilir.
Akışların işlenmesi için genellikle rxdart paketinden operatörler kullanılır, bu paket zengin bir araç seti sağlar ve akışların dönüşümü, filtrelenmesi ve birleştirilmesi için kullanılır.