Bu içerik bir YouTube videosundan üretilmiştir.
Flutter Dersleri: Stateful Widget'lar ve Örnek Uygulama
📚 Giriş
Flutter uygulamalarında dinamik ve etkileşimli kullanıcı arayüzleri (UI) oluşturmak, modern mobil geliştirmenin temelini oluşturur. Bu çalışma materyali, Flutter'da arayüzlerin zamanla değişen verileri nasıl yönettiğini ve kullanıcı etkileşimlerine nasıl tepki verdiğini anlamak için kritik bir yapı taşı olan Stateful Widget'ları derinlemesine incelemektedir. Bir düğmenin tıklanma sayısını ekranda güncellemek veya bir metin kutusunun içeriğini değiştirmek gibi senaryolar, Stateful Widget'lar sayesinde mümkün olur. Bu dersle, Flutter'ın etkileşimli dünyasına adım atacak ve uygulamalarınıza hayat vermenin yollarını keşfedeceksiniz.
💡 Stateful Widget Nedir ve Neden Önemlidir?
Stateful Widget'lar, adından da anlaşılacağı gibi, 'state' yani durum tutabilen widget'lardır. Bu, widget'ın yaşam döngüsü boyunca değişebilen verilere sahip olabileceği anlamına gelir.
✅ Temel Tanım: Durum tutabilen ve bu durumu değiştirebildiğinde kullanıcı arayüzünü güncelleyebilen widget'lardır.
Neden Önemlidir?
- Dinamik Arayüzler: Kullanıcı etkileşimlerine (örneğin, bir düğmeye tıklama) veya harici verilere (örneğin, ağdan gelen veriler) bağlı olarak arayüzün değişmesi gerektiğinde Stateful Widget'lar kullanılır.
- Veri Yönetimi: Bir düğmenin tıklanma sayısı, bir metin kutusunun içeriği veya bir liste öğesinin seçili hale gelmesi gibi durumlar, Stateful Widget'lar sayesinde yönetilir.
- Yeniden Çizim Mekanizması: Bir widget'ın durumu değiştiğinde, Flutter o widget'ı otomatik olarak yeniden çizer (re-render). Bu, uygulamanın kullanıcı etkileşimlerine anında tepki vermesini ve dinamik bir deneyim sunmasını sağlar.
- StatelessWidget'lardan Farkı:
StatelessWidget'lar oluşturulduktan sonra durumlarını değiştiremezler; statiktirler.StatefulWidget'lar ise yaşam döngüleri boyunca verilerini değiştirebilir ve bu değişiklikleri kullanıcı arayüzüne yansıtabilirler.
⚠️ Unutmayın: Eğer uygulamanızın arayüzünde zamanla değişen bir şey olacaksa, büyük ihtimalle bir Stateful Widget'a ihtiyacınız var demektir.
🛠️ Stateful Widget Nasıl Oluşturulur ve Yönetilir?
Bir Stateful Widget oluşturmak, aslında iki ayrı sınıf tanımlamayı gerektirir. Bu iki sınıf uyumlu bir şekilde çalışarak Flutter'ın reaktif yapısının temelini oluşturur.
-
StatefulWidgetSınıfı:- Bu sınıf, widget'ın kendisini temsil eder ve
StatefulWidgetsınıfından türetilir. - Asıl görevi, widget'ın durumunu yönetecek olan
Statenesnesini oluşturmaktır. - Bunu,
createState()metodunu uygulayarak yapar.createState()metodu, birStatenesnesi döndürür. - Bu sınıfın kendisi değişmez (immutable) olmalıdır; yani içinde değişen veri tutmaz.
- Bu sınıf, widget'ın kendisini temsil eder ve
-
StateSınıfı:- Bu sınıf, widget'ın durumunu yöneten ve
Statesınıfından türetilen kısımdır. - Asıl sihirli kısım burada gerçekleşir. Widget'ın değişebilen verileri (yani 'state') bu sınıf içinde tutulur.
setState()Metodu: Bu sınıfın en önemli metodusetState()'dir.setState()çağrıldığında, Flutter'a widget'ın durumunun değiştiği ve arayüzün yeniden çizilmesi gerektiği bildirilir.- Bu metodun içine, durumu güncelleyen kodlar yazılır. Örneğin, bir sayacı artırmak (
_counter++) veya bir metin değerini değiştirmek gibi. setState()çağrıldıktan sonra, Flutterbuild()metodunu tekrar çalıştırarak arayüzü güncel durumu yansıtacak şekilde yeniden oluşturur.
- Kullanıcı etkileşimlerine anında tepki verme (bir butona tıklandığında sayacın artması veya bir metin girişinin güncellenmesi)
setState()sayesinde mümkün olur.
- Bu sınıf, widget'ın durumunu yöneten ve
🚀 Örnek Uygulama: Basit Bir Sayıcı Yapımı
Şimdi öğrendiklerimizi basit ama etkili bir sayıcı uygulamasıyla pekiştirelim. Amacımız, bir düğmeye her bastığımızda ekrandaki sayının bir artmasını sağlamaktır.
1️⃣ Adım 1: StatefulWidget ve State Sınıflarını Oluşturma
* İlk olarak, bir StatefulWidget sınıfı ve onunla ilişkili bir State sınıfı tanımlanır.
* StatefulWidget sınıfı, createState() metodunda _MyCounterAppState() gibi bir State nesnesi döndürür.
2️⃣ Adım 2: Durum Değişkenini Tanımlama
* State sınıfımızın içinde, sayacın mevcut değerini tutan bir int değişkeni tanımlanır.
* Örneğin: int _counter = 0; (Genellikle _ ile başlayan değişkenler, sınıf içinde özel olduğunu belirtir.)
3️⃣ Adım 3: Durumu Güncelleyen Metodu Yazma
* Düğmeye basıldığında çağrılacak bir metot (örneğin _incrementCounter()) yazılır.
* Bu metot içinde, setState() metodu kullanılır.
* setState(() { _counter++; }); kodu, sayacın değerini artırır ve Flutter'a arayüzü güncellemesi gerektiğini bildirir.
4️⃣ Adım 4: Arayüzü Oluşturma
* State sınıfının build() metodu içinde, ekranda gösterilecek widget'lar (örneğin, sayacı gösteren bir Text widget'ı ve sayacı artıran bir FloatingActionButton veya ElevatedButton) tanımlanır.
* Düğmenin onPressed özelliğine _incrementCounter metodu atanır.
📊 Çalışma Mantığı:
- Kullanıcı düğmeye basar.
_incrementCounter()metodu çağrılır._incrementCounter()içindekisetState()metodu çalışır.setState()içindeki_counter++kodu_counterdeğişkeninin değerini artırır.setState()çağrıldığı için Flutter,Statesınıfınınbuild()metodunu yeniden çalıştırır.build()metodu, güncel_counterdeğerini kullanarak yeni birTextwidget'ı oluşturur ve ekranda sayı anında değişir.
Bu örnek, Stateful Widget'ların temel çalışma mantığını anlamak için harika bir başlangıç noktasıdır.
✅ Sonuç ve Gelecek Adımlar
Bugün Flutter'da Stateful Widget'ların ne olduğunu, neden dinamik ve etkileşimli kullanıcı arayüzleri oluşturmak için vazgeçilmez olduklarını ve nasıl kullanıldıklarını öğrendik. setState() metoduyla durumunu güncelleyerek uygulamanızı canlı tutmanın anahtarını keşfettiniz.
Bu bilgilerle artık daha karmaşık ve etkileşimli Flutter uygulamaları geliştirmeye hazırsınız. Kendi projelerinizde bu bilgileri kullanarak deneysel çalışmalar yapmaktan çekinmeyin. Farklı durumları yönetmeyi, kullanıcı girişlerini işlemeyi ve arayüzü dinamik olarak güncellemeyi deneyin.
Bir sonraki derste görüşmek üzere, kodlamaya devam edin! 🚀








