Sobes.tech
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 StatefulWidget un ar to saistīta State objekta.
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'),
        ),
      ],
    );
  }
}