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('მატება'),
),
],
);
}
}