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('Көбөйт'),
),
],
);
}
}