Junior
Kāda ir atšķirība starp Stateful un Stateless widgetiem?
sobes.tech AI
Atbilde no AI
-
StatelessWidget:
- Nav iekšējo stāvokli, kas var mainīties laika gaitā.
- Vidiņa parametri tiek noteikti tā izveides brīdī un paliek nemainīgi visa tā dzīves cikla laikā.
- Izmanto statiskiem datiem attēlot.
- Pārkrāsošana notiek tikai, pārveidojot vecāku vidi.
- Realizēts ar
build()metodi.
-
StatefulWidget:
- Tam ir iekšējais stāvoklis (
State), kas var mainīties atbildot uz notikumiem (lietošanas, tīkla pieprasījumi utt.). - Pārkrāsošana notiek, izsaucot
setState()metodi. - Izmanto interaktīviem elementiem un dinamiskajiem datiem.
- Sastāv no divām daļām: pašas
StatefulWidgetun ar to saistītaStateobjekta.
- Tam ir iekšējais stāvoklis (
| Raksturlielums | StatelessWidget | StatefulWidget |
|---|---|---|
| Stāvoklis | Nav | Ir mainīgs stāvoklis (State) |
| Pārkrāsošana | Kad tiek pārveidots vecāks | Kad tiek izsaukts setState() |
| Lietošana | Statiskie dati, neinteraktīvi elementi | Interaktīvi elementi, dinamiskie dati |
| Realizācija | Tikai build() metode |
createState() un dzīves cikla metodes State |
// Piemērs StatelessWidget
class MyStatelessWidget extends StatelessWidget {
final String text;
MyStatelessWidget({required this.text});
@override
Widget build(BuildContext context) {
return Text(text); // Vienkārši attēlo nodoto tekstu
}
}
// Piemērs StatefulWidget
class MyStatefulWidget extends StatefulWidget {
@override
_MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
int _counter = 0; // Iekšējais stāvoklis
void _incrementCounter() {
setState(() {
// Stāvokļa maiņa un pārkrāsošana
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Skaitītājs:'),
Text('$_counter'),
ElevatedButton(
onPressed: _incrementCounter, // Metode nospiežot
child: Text('Palielināt'),
),
],
);
}
}