Sobes.tech
Junior

Stateful жана Stateless виджеттердин айырмасы эмнеде?

sobes.tech AI

AIден жооп

  • StatelessWidget:

    • Ичке абалы жок, ал убакыттын өтүшү менен өзгөрө алат.
    • Виджеттин параметрлери анын түзүлгөндө коюлат жана анын өмүр бою өзгөрбөйт.
    • Статикалык маалыматтарды көрсөтүү үчүн колдонулат.
    • Перерисовка гана ата-энесинин кайра курулушу учурунда болот.
    • build() методу менен ишке ашырылат.
  • StatefulWidget:

    • Ички абалы (State) бар, ал окуяларга (пайдаланучунун аракеттери, тармактык суроолор жана башка) жооп катары өзгөрө алат.
    • Виджеттин кайра курулушу setState() методу чакырылганда болот.
    • Интерактивдүү элементтерди жана динамикалык маалыматтарды көрсөтүү үчүн колдонулат.
    • Ички бөлүктөрү: StatefulWidget өзү жана ага байланышкан State объекти.
Белги StatelessWidget StatefulWidget
Абалы Жок Өзгөрүлүүчү абалы (State)
Перерисовка Ата-энесинин кайра курулушу учурунда setState() чакырылганда
Колдонуу Статикалык маалыматтар, интерактивсиз элементтер Интерактивдүү элементтер, динамикалык маалыматтар
Ишке ашыруу Тек гана build() методу createState() жана State ичиндеги жашоо циклинин методдору
// Мисал StatelessWidget
class MyStatelessWidget extends StatelessWidget {
  final String text;

  MyStatelessWidget({required this.text});

  @override
  Widget build(BuildContext context) {
    return Text(text); // Жөнөкөй көрсөтүү берилген текст
  }
}
// Мисал StatefulWidget
class MyStatefulWidget extends StatefulWidget {
  @override
  _MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}

class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  int _counter = 0; // Ички абал

  void _incrementCounter() {
    setState(() {
      // Абалды өзгөртүү жана кайра куруу
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text('Санаачы:'),
        Text('$_counter'),
        ElevatedButton(
          onPressed: _incrementCounter, // басканда иштеген метод
          child: Text('Көбөйт'),
        ),
      ],
    );
  }
}