Button und Counter - wurzelsand/flutter-memos GitHub Wiki
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`.
}
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(),
),
),
),
);
}
-
Sowohl
StatefulWidget
als auchStatelessWidget
sind immutable (zumindestStatefulWidget
; Documentation: «StatefulWidget instances themselves are immutable»). Alle Felder scheinenfinal
sein zu müssen. Es reicht dabei nicht, dass die Referenzfinal
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. AndersState
: Es hat einen längeren Lebenszyklus, seine Felder sind veränderbar. -
State
besitzt das Feldwidget
, eine Referenz auf seinStatefulWidget
.