Flutter Advanced

Stateful vs. Stateless Widgets

Ein Stateful Widget ist ein Widget, dessen Inhalt sich ändern kann. Es wird verwendet, wenn der Inhalt des Widgets von externen Faktoren abhängt.

class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  int counter = 0;

  @override
  Widget build(BuildContext context) {
    return Container(
      child: Column(
        children: [
          Text('Counter: $counter'),
          ElevatedButton(
            onPressed: () {
              setState(() {
                counter++;
              });
            },
            child: Text('Increment'),
          ),
        ],
      ),
    );
  }
}

Refresher

Wenn Sie ein Widget aktualisieren möchten, verwenden Sie die setState-Methode. Diese Methode informiert das Framework, dass sich der interne Zustand des Widgets geändert hat und das Widget neu gezeichnet werden muss.

Falls der Zustand des Widgets von externen Faktoren abhängt, können Sie die didUpdateWidget-Methode überschreiben, um auf Änderungen zu reagieren.

class MyWidget extends StatefulWidget {
  final int value;

  MyWidget({required this.value});

  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  int counter = 0;

  @override
  void didUpdateWidget(covariant MyWidget oldWidget) {
    super.didUpdateWidget(oldWidget);
    if (widget.value != oldWidget.value) {
      setState(() {
        counter = widget.value;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      child: Column(
        children: [
          Text('Counter: $counter'),
          ElevatedButton(
            onPressed: () {
              setState(() {
                counter++;
              });
            },
            child: Text('Increment'),
          ),
        ],
      ),
    );
  }
}

Navigation