CodeBlanks Logo Icon CodeBlanks

initState ve dispose

initState ve dispose yaşam döngüsü yöntemlerini öğrenirsin.

Yaşam döngüsü

State nesnesinin bir yaşam döngüsü (lifecycle) vardır. initState, State ağaca ilk eklendiğinde bir kez çağrılır; burada veri tabanı bağlantısı, dinleyici veya denetleyici kurulur. dispose, State ağaçtan kaldırıldığında çağrılır; burada kurduğunuz kaynakları temizlersin.

class _SayacState extends State<Sayac> {
  late TextEditingController denetleyici;

  @override
  void initState() {
    super.initState();
    denetleyici = TextEditingController();
  }

  @override
  void dispose() {
    denetleyici.dispose();
    super.dispose();
  }
}

Kaynak temizliği

initState'te açılan her kaynak, dispose içinde kapatılmalıdır. Aksi halde bellek sızıntısı (memory leak) oluşur. Örneğin TextEditingController, StreamSubscription, AnimationController gibi nesneler dispose metodunda kapatılır. super.dispose() her zaman çağrılmalıdır.

@override
void dispose() {
  denetleyici.dispose();      // kontrolü serbest bırak
  dinleyici.cancel();         // aboneliği iptal et
  super.dispose();            // üst sınıfı bilgilendir
}

Uygulama Yaşam döngüsü bilgisini yazdır

main içinde iki satırı print ile yazdır: initState baslar ve dispose bitir.

Başlangıç kodu

main.dart
void main() {
  // iki satır yazdır:
  // initState baslar
  // dispose bitir

}

Örnek çözüm

main.dart
void main() {
  print('initState baslar');
  print('dispose bitir');
}

Beklenen çıktı

initState baslar
dispose bitir

Soru ve cevaplar

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

1 initState ne zaman çağrılır?

  • setState her çağrıldığında
  • State ağaca ilk eklendiğinde bir kez Doğru cevap
  • Uygulama her açıldığında tekrar tekrar
  • Her build'den önce

Açıklama: initState, State ağaca ilk eklendiğinde bir kez çağrılır; kaynak kurulumu burada yapılır.

2 Yaşam döngüsü metodu

Soru
@override
void ____() {
  super.dispose();
  denetleyici.dispose();
}
Cevap
@override
void dispose() {
  super.dispose();
  denetleyici.dispose();
}

Açıklama: dispose metodu, State ağaçtan kaldırıldığında kaynakları temizler.

3 Yaşam döngüsü kavramları

Kavram Anlamı
initState State eklendiğinde bir kez çağrılır
dispose State kaldırıldığında çağrılır
lifecycle State'in başlangıç ve bitiş ömrü
memory leak Kaynak kapatılmazsa oluşur

Başlangıç bölümündeki tüm dersler