Junior
Kuo skiriasi Stateful ir Stateless widgetai?
sobes.tech AI
Atsakymas iš AI
-
StatelessWidget:
- Neturi vidinės būsenos, kuri galėtų keistis laikui bėgant.
- Vaidmens parametrai nustatomi jo sukūrimo metu ir lieka nepakitę viso jo gyvavimo ciklo metu.
- Naudojamas statiniams duomenims rodyti.
- Perbraukimas vyksta tik perkuriant tėvinį vaizdą.
- Įgyvendinamas
build()metodu.
-
StatefulWidget:
- Turi vidinę būseną (
State), kuri gali keistis reaguojant į įvykius (vartotojo veiksmus, tinklo užklausas ir kt.). - Perbraukimas vyksta iškvietus
setState()metodą. - Naudojamas interaktyviems elementams ir dinamiškiems duomenims rodyti.
- Susideda iš dviejų dalių: pačio
StatefulWidgetir su juo susijusioStateobjekto.
- Turi vidinę būseną (
| Bruožas | StatelessWidget | StatefulWidget |
|---|---|---|
| Būklė | Neturi | Turi keičiamą būseną (State) |
| Perbraukimas | Kai perstatomas tėvas | Kai iškviečiamas setState() |
| Naudojimas | Statiniai duomenys, neinteraktyvūs elementai | Interaktyvūs elementai, dinamiški duomenys |
| Įgyvendinimas | Tik build() metodas |
createState() ir gyvavimo ciklo metodai State objekte |
// Pavyzdys StatelessWidget
class MyStatelessWidget extends StatelessWidget {
final String text;
MyStatelessWidget({required this.text});
@override
Widget build(BuildContext context) {
return Text(text); // Paprastas rodyti perduotą tekstą
}
}
// Pavyzdys StatefulWidget
class MyStatefulWidget extends StatefulWidget {
@override
_MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
int _counter = 0; // Vidinė būseną
void _incrementCounter() {
setState(() {
// Būsenos keitimas ir perbraukimo iškvietimas
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Skaitiklis:'),
Text('$_counter'),
ElevatedButton(
onPressed: _incrementCounter, // Metodas paspaudus
child: Text('Padidinti'),
),
],
);
}
}