Flutter’da Widget Kavramı
Flutter’da widget olarak adlandırılan şey aslında Dart programlama dilindeki sınıflar (classes) ve nesnelerdir (objects). Bu nedenle sınıf yapılarını iyi bir şekilde anlamak widget’ları efektif bir şekilde kullanmak için oldukça yardımcı olacaktır.
Flutter’da Widget
Nasıl ki Dart programlama dilinde her şey bir nesne ise Flutter’da da neredeyse her şey widget’tır. Her ne kadar Türkçeye bileşen olarak çevrilse de jargona hakimiyet olması açısından widget olarak kullanmaya devam edeceğiz.
Peki, bir widget tam olarak nedir ve ne işe yarar sorusu akıllara gelebilir. Zihinlerde somutlaşması adına widget, bir kullanıcının bir işlevi yürütmek veya bir hizmete erişmek için uygulamanızı kullanmasına izin veren herhangi bir arabirim bileşenidir.
Haliyle Görünür her öğe, düzen ve hatta uygulamanın kendisi Flutter’daki widget’lardır. Yani daha da kısaltırsak widget, resim, metin veya düzen gibi herhangi bir görünür öğe veya yapıdır diyebiliriz.
Ancak şunu da belirtmekte fayda var; widget’lar, grafik nesnelerinden ziyade gerçekten yapılandırma nesneleridir. Öyle ki bir widget yazdığınızda, bu direkt olarak doğrudan ekranda gösterilmez, yani o kadar doğrudan bir işlem değildir. Widgetları yazıyorsunuz ve kullanıcı arayüzünü yapılandırıyorlar, ardından Flutter onları ekranda görüntülüyor.
Herhangi bir Flutter uygulamasına bakarsanız kullanıcı arayüzünün birçok widget’tan oluştuğu fark edilebilirsiniz. Ancak bunların çoğunun kullanıcıyla etkileşime girmesi gerekmez hatta gerekmediği durumlar olmalıdır da.
İşte bu durum değişkliği neticesiyle Flutter’da widgetlar stateless ve stateful olmak üzere iki ana kategoriye ayrılırlar.
Stateless ve Stateful Widget
Stateless ve stateful kelimelerinin köklerine baktığınızda burada İngilizcede durum anlamına gelen state kelimesi görülmektedir.
Peki state yani durum bize neyi ima etmektedir ve bundan ne anlamalıyız? Kısaca özetlemek gerekirse state ile kullanım ömrü boyunca widget içindeki verilerin değişip değişmeyeceği ifade edilir.
Stataless Widget
Durum bilgisi olmayan widget anlamına gelir. Eğer zamanla değişmeyecek bir UI parçası oluşturmanız gerekiyorsa bu tür widget’ı kullanmanız gerekecek. Bu özelliğiyle tıpkı durgun bir su birikintisi gibidir.
Stateless widget ile oluşturulan şeyler zamanla değişmeyecek ve aynı kalacaktır. Böylece hiçbir dış bağımlılık veya akış olmayacak ve widget bir kez oluşturulduktan sonra değişmeyeceği için statik olacaktır.
Durum bilgisi olmayan widget elemanları, bir üst widget elemanı tarafından build () metodu vasıtasıyla oluşturulur. Oluşturulduklarında da işlerini yapmak için ihtiyaç duydukları bilgiler aktarılır.
Daha da açıklayıcı ifade edersek; ana widget elemanı, state bilgisi olmayan alt widget elemanını oluşturur ve örnekleme sırasında bir dizi özelliği iletir. Alt widget elemanı bu özellikleri yalnızca üst widget elemanından alabilir ve bunları kendi başına değiştirmez.
Kod açısından bu, alt widget elemanlarının yalnızca yapım sırasında tanımlanan nihai özelliklere sahip olduğu ve bu özelliklerin yalnızca bir üst widget elemanının güncellenmesi ve ardından alt widget elemanlarına doğru dalgalanması yoluyla değiştirilebileceği anlamına gelir.
Statafull Widget
Durum bilgisi olan widget anlamına gelir ve zamanla değişecek bir UI parçası oluşturulması gerekiyorsa kullanılır.
Bu değişiliği ise verileri durum ile ilişkili bir State sınıfında depolayarak yapar ve kullanıcının bir şey yapması sonucunda bu veri (durum) değişir ve bu değişiklikle yanıt verme sağlanır.