Sobes.tech
Junior

Stateful va Stateless vidjetlar o'rtasidagi farq nima?

sobes.tech AI

AIdan javob

  • StatelessWidget:

    • Ichining ichki holati yo'q, va vaqt o'tishi bilan o'zgartirilishi mumkin emas.
    • Vidget parametrlarining qiymati uning yaratilishida belgilangan bo'lib, uning hayoti davomida o'zgarmaydi.
    • Statik ma'lumotlarni ko'rsatish uchun ishlatiladi.
    • Qayta chizish faqat ota vidget qayta qurilganda amalga oshadi.
    • build() metod bilan amalga oshiriladi.
  • StatefulWidget:

    • Ichki holati (State) bo'lib, voqealarga (foydalanuvchi harakatlari, tarmoq so'rovlar va boshqalar) javob berishi mumkin.
    • setState() metod chaqirilganda vidget qayta chiziladi.
    • Interaktiv elementlar va dinamik ma'lumotlarni ko'rsatish uchun ishlatiladi.
    • Ikki qismdan iborat: o'zi StatefulWidget va unga bog'langan State obyekti.
Xususiyat StatelessWidget StatefulWidget
Holat Yo'q O'zgaruvchan holat (State)
Qayta chizish Ota vidget qayta qurilganda setState() chaqirilganda
Foydalanish Statik ma'lumotlar, interaktiv bo'lmagan elementlar Interaktiv elementlar, dinamik ma'lumotlar
Amalga oshirish Faqat build() metodi bilan createState() va State ning hayot sikli metodlari bilan
// StatelessWidget misoli
class MyStatelessWidget extends StatelessWidget {
  final String text;

  MyStatelessWidget({required this.text});

  @override
  Widget build(BuildContext context) {
    return Text(text); // Kiritilgan matnni oddiy ko'rsatadi
  }
}
// StatefulWidget misoli
class MyStatefulWidget extends StatefulWidget {
  @override
  _MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}

class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  int _counter = 0; // Ichki holat

  void _incrementCounter() {
    setState(() {
      // Holatni o'zgartiradi va qayta chizishni chaqiradi
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text('Hisoblagich:'),
        Text('$_counter'),
        ElevatedButton(
          onPressed: _incrementCounter, // Bosilganda metodni chaqirish
          child: Text('Oshirish'),
        ),
      ],
    );
  }
}