Örnek sorular
Fl Flutter State Management WidgetsZorluk 1
Bir State nesnesinde initState() metodunun temel amacı nedir?
- aState nesnesi ağaca ilk eklendiğinde bir kez çalışan tek seferlik kurulum.✓
- bWidget her yeniden oluşturulduğunda çalışan kod.
- cWidget kaldırılmadan önce kaynakları temizleyen bir metot.
- dSadece parent widget'ın constructor argümanları değiştiğinde çağrılan bir callback.
Açıklama:initState(), State nesnesi oluşturulup ağaca eklendikten hemen sonra bir kez çağrılır — bir stream'e abone olmak ya da bir controller'ı ilklendirmek gibi tek seferlik kurulumlar için doğru yerdir.
Fl Flutter State Management WidgetsZorluk 1
Bir State nesnesinde dispose() neden sorumludur?
- aState kaldırılmadan önce kaynakları serbest bırakmak.✓
- bWidget ağacını sıfırdan yeniden oluşturmak.
- cHer
build() çağrısından önce çalışmak. - dWidget'ın state'ini otomatik olarak diske kalıcı hale getirmek.
Açıklama:dispose(), State nesnesi atılmadan hemen önce (ör. widget ağaçtan kalıcı olarak kaldırıldığında) bir kez çalışır — stream subscription'ları iptal etmek, AnimationController'ları dispose etmek, TextEditingController'ları kapatmak için doğru yerdir.
Fl Flutter State Management WidgetsZorluk 1
Bir widget, build metodunun döndürdüğü bir callback içinde setState(() { count++; }) çağırıyor. setState gerçekte neye sebep olur?
- aPiksel buffer'ını
build()'i tekrar çağırmadan anında yeniden çizer. - bSadece değişkeni günceller; UI değişikliği asla yansıtmaz.
- cSadece bu widget'ı değil, uygulamadaki her widget'ı yeniden çizer.
- dWidget'ı dirty işaretler ve
build()'in tekrar çalışması için bir rebuild zamanlar.✓
Açıklama:setState, verilen callback'i (alanı değiştirerek) çalıştırır ve ardından framework'e bu widget'ın dirty olduğunu söyler, bir sonraki frame'de yeniden çizilmesini zamanlar — build() tekrar çağrılır ve yeni değer döndürülen widget ağacına yansır.
Fl Flutter State Management WidgetsZorluk 2
Bir State nesnesinin kendi ömrü dışında (ör. dispose() sonrası) setState çağırmak neden hata fırlatır?
- aÇünkü
setState, nesne kimliğini tamamen yok sayan statik bir metottur. - bÇünkü Dart, bir class instance'ı oluşturulduktan sonra herhangi bir metot çağrılmasını yasaklar.
- cÇünkü widget'ın constructor argümanları dispose sonrası immutable hale gelir.
- dÇünkü State'in artık bir rebuild zamanlamak için bağlı bir element'i yoktur.✓
Açıklama:dispose() çalıştıktan sonra State, element ağacından ayrılmıştır — artık dirty işaretlenecek geçerli bir element yoktur, bu yüzden o noktada setState çağırmak bir lifecycle ihlalidir ve hata fırlatır.
Fl Flutter State Management WidgetsZorluk 2
Bir StatefulWidget'ın parent'ı yeniden oluşturulup aynı widget'a (aynı pozisyon/tip, aynı Key) yeni constructor argümanları geçiriyor. State'in yeni argümanlara tepki verebilmesi için hangi lifecycle metodu çağrılır?
- a
initState(), çünkü her zaman yepyeni bir State nesnesi oluşturulur. - b
didUpdateWidget(oldWidget), önceki konfigürasyona erişim sağlar.✓ - cHiçbir metot çağrılmaz; State nesnesi yeni constructor argümanlarını asla göremez.
- d
dispose(), çünkü yeni argümanlar eski widget'ın kaldırılması sayılır.
Açıklama:Bir widget aynı runtime tipi ve Key ile yeniden oluşturulduğunda, Flutter aynı State nesnesini yeniden kullanır ve didUpdateWidget(oldWidget)'ı çağırır; böylece oldWidget'ı yeni widget alanıyla karşılaştırıp tepki verebilir (ör. geçirilen bir stream değiştiyse yeniden abone olmak).
Fl Flutter State Management WidgetsZorluk 1
InheritedWidget hangi sorunu çözer?
- aBir alt widget'ın, değeri constructor üzerinden açıkça geçirmeden bir üst atadan okumasını sağlar.✓
- b
build() metoduna olan ihtiyacı tamamen ortadan kaldırır. - cVeriyi kalıcı olarak cihazın local veritabanında saklar.
- dAlt ağaçtaki her widget'ı değişiklik olsun olmasın her frame'de yeniden oluşturmaya zorlar.
Açıklama:InheritedWidget, ağaç aşağı verimli, örtük değer aktarımı için Flutter'ın mekanizmasıdır — bir alt widget değeri okumak ve o değer değiştiğinde bilgilendirilmek üzere kendini kaydetmek için context.dependOnInheritedWidgetOfExactType<T>() çağırır, elle prop geçirmeye gerek kalmaz.