StatefulWidget

StatefulWidget

açıklama

İçinde durum/State barındıran widget.Widget tarafından tutulan ve bu Widget’ın kullanım ömrü boyunca değişebilen veri kümesine State adı verilir.
İçeririnde kullanım ömrü boyunca değişebilen veri kümesi yani state tutan widgetlere StatefulWidget ler denir.
Bir State e uygulanan değişiklikler, Widget’ı yeniden oluşturmaya zorlar.

StatefulWidget Çalışma Sırası

Kurulum:
1. StatefulWidget Constructur() (sadece ilk kurulumda çalışır)
2. StatefulWidget createState() (sadece ilk kurulumda çalışır)
3. _StatefulWidget initState() (sadece ilk kurulumda çalışır)
4. _StatefulWidget build()

Güncelleme:
1. _StatefulWidget setState()
2. _StatefulWidget didUpdateWidget()
3. _StatefulWidget build()

a) StatefulWidgerlerde bir üst klasın propertilerine ulaşamak için “widget.property” kullanılır.

@override
void initState(){
_tumDegerler.add(widget.ilkDeger);
super.initState();
}

b) setState rebuild için tetikleyici fonksiyon.Yeniden build/derlenmesini sağlar.

@override
void setState(){

}

c) didUpdateWidget(StatefullClasimiz oldWidget) çalışması için statefullWidgetin kurulmuş olması gerekir.
Statenin güncellendiğini bildirir. Örneğin apiyle borsa bilgileri goncellendiğini bunun içinde yazarak deger statelerinin değiştigini fluttere bildiririz ki yeniden build yapsın.

@override
void didUpdateWidget(StatefullClasimiz oldWidget) {

super.didUpdateWidget(oldWidget);
}

StatelessWidget mi StatefulWidget mi kullanmalıyım?

Widgetnizin içinde kullandığınız bir değişken, widgetinizin ömrü boyunca değişiklige uğruyor ve her değiştiğinde bu değişikliği bu widgete yansıtması gerekiyor ise StatefulWidget kullanmalısınız.
Bu değişikliği, widgeti yeniden oluşturmaya zorlayarak gerçekleştiren setState() fonksiyonu içinde yaparak gerçekleştirirsiniz.
Bir değişkenin değişikliğe uğraması setState() fonksiyonu içinde gerçekleştiğinde, widget yeniden oluşturulması gerektiğini anlar ve bu değişikiği widgeti yeniden oluştururken yansıtır.
Önemli nokta değişikliğe neden olan bu olay yani bir State in(basıtçe söylersek bir değişkenin) değişmesine neden olan olay yine bu widget içinde gerşeklemelidir.
Bir widgetin statefulwidget olması için iki özelliği barındırması gerekir.
1.Değişikliğe neden olan olay bu widget içinde gerçekleşmeli
2.söz konusu olay sonunda ortaya çıkan bilgi yine bu widget içinde kullanılmalı.

Örneğin başka bir widgetten bu widgete bilgi geçilecek olsun bu durumda StatelessWidget kullanılır zira bilgi başka bir widgette üretilmiştir.
Başka bir örnek, bir seçileblir liste . Burada kullanılıcı listeden bir elemana tıklar olay bu widgette oluşur. Üretilen bilgi liste elemanının true yani seçilmiş olması yine bu
widget içinde yansıtılmak zorunda dolayısıyla statefulwidget kullanılmalı.Ayrıca bu bilgi diğer bir widgete de geçiliyor ise o widgetin StatelessWidget olması yeterlidir.

Widgetlere değer geçmek:

StatelessWidget e değer yollamak
a. constractur ile final properysine ilk değer atanarak yapılır. OrnekStatelessClass(deger)
b. constractur ile final function propertisine funtion adi parametre verilerek yapılır. OrnekStatelessClass(fonsiyonadi)

StatefulWidget e değer yollamak
a.nonprotect olan ana statefulwidgete constructor ile final propertysine ilk değer geçilerek yapılır.daha sonra protected olan statefulwidgetstate clasından
bu değer statefullwidgetlerin özel fonksiyonlarının(initstate, setstate tipi) içinden widget.property şeklinde ulaşılarak değer alınmış olur.

Örnek

import 'package:flutter/material.dart';

    class OrnekStatefulWidget extends StatefulWidget
    {
      final String ilkDeger;
      DurumluClass(this.ilkDeger);

      @override
      _OrnekStatefulWidgetSatete CreateState => _OrnekStatefulWidgetSatete();

    }
    

      class _OrnekStatefulWidgetSatete extends State 
      {
          List _tumDegerler = [];

            @override
            void initState(){ // StatefulWidgerde ustklasın constraktırından sonra build metodundan önce çalışır. 
                                //Kısacası bir StatefulWidget kurulumundan önce sadece birkere çalışır.

              _tumDegerler.add(widget.ilkDeger); // StatefulWidgerlerde bir üst klasın propertilerine ulaşamak için widget.property kullanılır.
              super.initState();

            }

            @override
            Widget build(BuildContex context)
            {

                return MaterialApp
                ( 
                      title: 'OrnekStatefulWidgetSatete Uygulaması',
                      theme: ThemeData(primaryColorLight: Colors.blue),
                      home: Scaffold(
                                  appBar: AppBar( title: Text("OrnekStatefulWidgetSatete appBar Başlık"), backgroundColor: Colors.blueAccent ),
                                  body: Container( 
                                            margin: EdgeInsets.all(10.0), 
                                            child: Column(
                                                      children: []
                                                    ), 
                                            ),    
                            ),                                                          
                );

            }

        }

Bir cevap yazın

KAPAT
%d blogcu bunu beğendi: