Event Loop nedir?
Flutter’da “event loop” terimi, uygulamanın çalışma sürecini ve etkileşimleri nasıl işlediğini anlamak için önemlidir. Flutter, bir event loop kullanarak asenkron etkinlikleri işler. Event loop, uygulamanın farklı etkinlikler ve işlemler arasında nasıl geçiş yaptığını yöneten bir mekanizmadır.
Flutter’ın event loop yapısı şu şekildedir:
- Başlangıç: Uygulama başladığında, event loop başlatılır ve ana iş parçacığı (UI iş parçacığı olarak da bilinir) oluşturulur. Bu iş parçacığı, kullanıcı arayüzünü oluşturur ve günceller.
- Asenkron İşlemler: Flutter, kullanıcı etkileşimlerini ve diğer asenkron işlemleri yönetmek için Dart dilindeki Future ve Stream gibi yapıları kullanır. Bu asenkron işlemler, event loop tarafından yönlendirilir.
- Etkinliklerin İşlenmesi: Kullanıcı dokunuşları, tuş vuruşları, ağ istekleri, zamanlayıcılar vb. gibi etkinlikler, event loop tarafından yakalanır ve uygun işleme yönlendirilir. Bu işleme, bu etkinlikleri işlemek için tanımladığınız kodu içerebilir.
- setState(): setState() yöntemi, widget’in durumunu değiştirdiğinizde yeniden çizilmesi gerektiğini işaret eder. Bu, Flutter’ın widget ağacını güncellemesini tetikler ve bu da kullanıcı arayüzünün güncellenmesine yol açar.
- Yeniden Çizim: setState() ile işaretlenen widgetler, event loop tarafından yeniden çizilir ve kullanıcıya güncel bir arayüz sunulur.
- Sürekli Döngü: Event loop, kullanıcı etkileşimlerini ve asenkron işlemleri sürekli olarak dinler ve işler. Bu sürekli döngü sayesinde uygulama etkileşimli ve reaktif bir şekilde çalışır.
Flutter’ın event loop yapısı, kullanıcı deneyimini daha hızlı ve sorunsuz hale getirmek için asenkron işlemleri etkili bir şekilde yönetir. Event loop, uygulamanın farklı parçaları arasında koordinasyon sağlar ve kullanıcı etkileşimlerini sorunsuz bir şekilde işler.
initState içinde setState tanımlanırsa ne olur?
Flutter’da initState
içinde setState
kullanmanın bazı istenmeyen sonuçları olabilir. initState
metodu, bir State nesnesi oluşturulduğunda yalnızca bir kez çağrılır ve genellikle widget’in başlatılma sürecinde kullanılır. Bu nedenle, setState
kullanarak widget’in durumunu değiştirmeye çalışırsanız, bu widget’in ilk kez oluşturulduğu andaki durumu güncellemeye çalışırsınız.
Bu durumda, widget yeniden çizilmeden önce setState
tarafından yapılan güncellemeler görünmez olabilir veya beklenmedik hatalara neden olabilir. Bu yüzden initState
içinde setState
kullanmaktan kaçınılması genellikle önerilir.
Widget’in durumunu başlatma sırasında değiştirmeniz gerekiyorsa, bunu initState
içinde değil, widget’in build metodu içinde veya daha sonraki yaşam döngüsü metotlarından birinde yapmanız daha iyi olacaktır, böylece güncellemeler beklenen şekilde işlenir ve görünür.
Özetlemek gerekirse, initState
içinde setState
kullanmak, beklenmeyen davranışlara yol açabilir ve bu nedenle genellikle kaçınılması gereken bir uygulama örüntüsüdür.