Flutter StatefulWidget nedir? Bir önceki yazımda StatelessWidget‘ın ne olduğuna ve onunla neler yapıp, yapamadığımıza değinmiştim. StatefulWidget’ın ne olduğunu ve StatelessWidget ile aralarındaki farklardan bahsedeceğim bu yazıda aynı zamanda StatefulWidget için kullanım alanları ve örnekler sunacağım. Bunun yanında kurumsal olarak yaptığım projelerden edindiğim tecrübeleri de size aktaracağım.

StatefulWidget, bir widget içerisindeki elementlerin değiştiği veya gelecekte değişebileceği durumlarda kullanılacak root widget’tır. Bu sınıf widget’lar içerisinde StreamBuilder, FutureBuilder gibi asenkron çalışan ve Future verileri bekleyen widget’lar kullanabilirsiniz.

Bunun yanında StatefulWidget içerisinde durumu değişecek widget’lara örnek olarak onPressed ile bool bir verinin değerinin değiştirilmesi ve bu değişiklik neticesinde bir switch on/off yapılacaksa setState’e ve StatefulWidget’a ihtiyacınız var. Örneğin yazdığım Task Manager uygulamasında Dark Mode / Light Mode durumunun değişikliğini setState ile birlikte bütün uygulamaya bildirebiliyorum.

Bu uygulama içerisindeki diğer örnek ise, kullanıcı adının değiştirilmesi ve anlık olarak bulunduğu sayfaya aktarılması tamamıyla setState ile gerçekleştirilir.

StatefulWidget vs StatelessWidget

setState nedir? StatefulWidget ile ne ilgisi var?

setState fonksiyonu, widget’lar ekrana çizildikten sonra kullanıcıdan gelen bir veriye göre değişikliğe uğrayan widget’ları güncellemek için kullanılan çok basit ve güçlü bir fonksiyondur. Yalnızca StatefulWidget ile beraber kullanılabilir çünkü StatelessWidget’ın bir state’i olmadığı için setState yapamazsınız. 🙂

setState fonksiyonu widget ağacının yeniden çizilmesi için zorlar. Bu yeniden çizilme işlemi atomik bir sürede gerçekleştiği için algılamamız imkansız fakat setState fonksiyonunun kullanılması büyük uygulamalarda ağır yükler oluşturabilir. Tam olarak bu yüzden GetX, Provider, BLoC gibi state yönetim kütüphaneleri büyük ölçekteki uygulamalarda kullanılması gerekir.



Sonuç

Sonuç olarak, StatefulWidget, state içerisinde verilerin değişmesi veya üzerine yazılması gerektiği durumlarda kullanılmalıdır. StatelessWidget ise bunun haricinde olan tüm durumlarda kullanılabilir. setState fonksiyonu da yalnızca StatefulWidget ile beraber kullanılabilir.


Okuyucuya Not

Merhaba okuyucu! Blogum son zamanlarda yüksek trafik almaya başladı ve bu durumdan memnunum fakat aynı zamanda siz ziyaretçileri tatmin edememekten endişeliyim. 🙂 Eğer yazılarım ile ilgili bir tavsiyeniz olursa mail adresimden bana ulaşabilir veya Twitter üzerinden direct message gönderebilirsiniz. Github’ta örnek olarak yaptığım projelere göz atmak isterseniz de bu linki kullanabilirsiniz. Umarım bu ziyaretinizle size bir şeyler katabilmişimdir.

Sağlıcakla kalın!

Tags: