Sobes.tech
Junior

Stateful və Stateless widgetləri arasındakı fərq nədir?

sobes.tech Süni İntellekt

AI-dan cavab

  • StatelessWidget:

    • Daxili vəziyyəti olmayan və zamanla dəyişə bilən vəziyyəti olmayan widget.
    • Widget parametrləri onun yaradılmasında təyin edilir və bütün həyat dövrü boyunca dəyişmir.
    • Statik məlumatların göstərilməsi üçün istifadə olunur.
    • Yenidən çəkiliş yalnız valideyn widget yenidən qurulduqda baş verir.
    • build() metodu ilə həyata keçirilir.
  • StatefulWidget:

    • Daxili vəziyyəti (State) olan və hadisələrə (istifadəçi əməliyyatları, şəbəkə sorğuları və s.) cavab verə bilən widget.
    • setState() metodunun çağırılması ilə widget yenidən çəkilir.
    • İnteraktiv elementlər və dinamik məlumatların göstərilməsi üçün istifadə olunur.
    • İki hissədən ibarətdir: öz StatefulWidget və ona bağlı State obyekti.
Xüsusiyyət StatelessWidget StatefulWidget
Vəziyyət Yoxdur Dəyişən vəziyyət (State)
Yenidən çəkiliş Ata widget yenidən qurulduqda setState() çağırıldıqda
İstifadə Statik məlumatlar, interaktiv olmayan elementlər İnteraktiv elementlər, dinamik məlumatlar
İcrası Yalnız build() metodu ilə createState()State-in həyat dövrü metodları ilə
// StatelessWidget nümunəsi
class MyStatelessWidget extends StatelessWidget {
  final String text;

  MyStatelessWidget({required this.text});

  @override
  Widget build(BuildContext context) {
    return Text(text); // Sadəcə ötürülən mətni göstərir
  }
}
// StatefulWidget nümunəsi
class MyStatefulWidget extends StatefulWidget {
  @override
  _MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}

class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  int _counter = 0; // Daxili vəziyyət

  void _incrementCounter() {
    setState(() {
      // Vəziyyəti dəyişir və yenidən çəkilişə səbəb olur
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text('Sayğac:'),
        Text('$_counter'),
        ElevatedButton(
          onPressed: _incrementCounter, // Basıldıqda metod çağırılır
          child: Text('Artır'),
        ),
      ],
    );
  }
}