Sobes.tech
Junior

Stateful ve Stateless widget'lar arasındaki fark nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

  • StatelessWidget:

    • İçsel durumu olmayan, zamanla değişebilecek duruma sahip olmayan bir widget.
    • Widget parametreleri oluşturulurken belirlenir ve yaşam döngüsü boyunca değişmez.
    • Statik verileri göstermek için kullanılır.
    • Yeniden çizim yalnızca üst widget yeniden yapılandırıldığında gerçekleşir.
    • build() metodu ile uygulanır.
  • StatefulWidget:

    • İçsel durumu (State) olan ve kullanıcı etkileşimleri, ağ istekleri gibi olaylara yanıt verebilen bir widget.
    • setState() metodu çağrıldığında yeniden çizim gerçekleşir.
    • Etkileşimli öğeler ve dinamik veriler göstermek için kullanılır.
    • İki bölümden oluşur: kendisi StatefulWidget ve ona bağlı State nesnesi.
Özellik StatelessWidget StatefulWidget
Durum Yok Değişebilir duruma sahip (State)
Yeniden çizim Üst widget yeniden yapılandırıldığında setState() çağrıldığında
Kullanım Statik veriler, etkileşimsiz öğeler Etkileşimli öğeler, dinamik veriler
Uygulama Sadece build() metodu ile createState() ve yaşam döngüsü metodları ile
// StatelessWidget örneği
class MyStatelessWidget extends StatelessWidget {
  final String text;

  MyStatelessWidget({required this.text});

  @override
  Widget build(BuildContext context) {
    return Text(text); // Verilen metni gösterir
  }
}
// StatefulWidget örneği
class MyStatefulWidget extends StatefulWidget {
  @override
  _MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}

class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  int _counter = 0; // İçsel durum

  void _incrementCounter() {
    setState(() {
      // Durumu değiştirir ve yeniden çizim yapar
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text('Sayaç:'),
        Text('$_counter'),
        ElevatedButton(
          onPressed: _incrementCounter, // Tıklama ile çağrılır
          child: Text('Arttır'),
        ),
      ],
    );
  }
}