Button und Counter - wurzelsand/flutter-memos GitHub Wiki

Button und Counter

Vervollständige die Klassen und die main-Funktion:

import 'package:flutter/material.dart';

class CounterDisplay extends StatelessWidget {
  // Ein Widget, das eine Zahl besitzt und diese anzeigt.
}

class CounterIncrementer extends StatelessWidget {
  // Ein Widget, das aus einem `ElevatedButton` besteht.
}

class Counter extends StatefulWidget {
  // Ein Widget, das ein `_CounterState`-Objekt bildet.
}

class _CounterState extends State<Counter> {
  // Ein State-Objekt, das `CounterDisplay`- und `CounterIncrementer`-Objekte
  // in einer Reihe bildet, mit einem Abstand von 16 (device independent) Pixeln.
}

void main() {
  // Starten einer `MaterialApp`.
}

Ausführung

import 'package:flutter/material.dart';

class CounterDisplay extends StatelessWidget {
  const CounterDisplay({required this.count, super.key});

  final int count;

  @override
  Widget build(BuildContext context) {
    return Text('Count: $count');
  }
}

class CounterIncrementer extends StatelessWidget {
  const CounterIncrementer({required this.onPressed, super.key});

  final VoidCallback onPressed;

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: onPressed,
      child: const Text('Increment'),
    );
  }
}

class Counter extends StatefulWidget {
  const Counter({super.key});

  @override
  State createState() {
    return _CounterState();
  }
}

class _CounterState extends State<Counter> {
  int _counter = 0;

  void _increment() {
    setState(() {
      ++_counter;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Row(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        CounterIncrementer(onPressed: _increment),
        const SizedBox(width: 16.0),
        CounterDisplay(count: _counter,),
      ],
    );
  }
}

void main() {
  runApp(
    const MaterialApp(
      title: 'Counter',
      home: Scaffold(
        body: Center(
          child: Counter(),
        ),
      ),
    ),
  );
}

Anmerkungen

  • Sowohl StatefulWidget als auch StatelessWidget sind immutable (zumindest StatefulWidget; Documentation: «StatefulWidget instances themselves are immutable»). Alle Felder scheinen final sein zu müssen. Es reicht dabei nicht, dass die Referenz final ist: Auch das Objekt, auf das sie zeigt, darf sich nicht verändern (const). Wenn sich eines dieser Objekte ändern soll, muss es neu gebildet werden. Anders State: Es hat einen längeren Lebenszyklus, seine Felder sind veränderbar.

  • State besitzt das Feld widget, eine Referenz auf sein StatefulWidget.

⚠️ **GitHub.com Fallback** ⚠️