Trinkgeldrechner: Personen
Teil des Abschnitts Apps interaktiv gestalten der Flutter-Journey von Coddy. Lektion 32 von 34.
Eine Rechnung wird oft geteilt. Füge eine Zeile mit der Anzahl der Personen und zwei Symbolschaltflächen, Minus und Plus, hinzu – wie beim Zähler, den du in „A Counter Up and Down“ erstellt hast.
Es zahlt immer mindestens eine Person, daher wird die Minustaste bei 1 ausgegraut. Ein IconButton wird genauso ausgegraut wie andere Schaltflächen, mit onPressed: null. Wenn die Funktion kurz ist, kannst du sie direkt in den ? : schreiben:
onPressed: _people > 1
? () {
setState(() {
_people--;
});
}
: null,Ein SizedBox(width: 16) in der Zeile hält die Schaltflächen ein wenig vom Text entfernt.
Aufgabe
Einfach- Behalte die Anzahl der Personen in
int _people = 1;bei. - Füge unter dem Trinkgeldbetrag eine
RowmitPeople: 1, einemIconButtonmitIcons.removeund einem mitIcons.addhinzu. - Mit dem Pluszeichen fügst du eine Person hinzu. Mit dem Minuszeichen entfernst du eine Person; bei 1 ist die Schaltfläche ausgegraut.
Probier es selbst
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: const HomePage(),
);
}
}
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
double _bill = 0;
double _tipPercent = 10;
@override
Widget build(BuildContext context) {
final double tip = _bill * _tipPercent / 100;
return Scaffold(
appBar: AppBar(title: const Text('Tip Calculator')),
body: Padding(
padding: const EdgeInsets.all(24),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextField(
keyboardType: const TextInputType.numberWithOptions(decimal: true),
decoration: const InputDecoration(
labelText: 'Bill',
border: OutlineInputBorder(),
),
onChanged: (String value) {
setState(() {
_bill = double.tryParse(value) ?? 0;
});
},
),
const SizedBox(height: 8),
Text('Bill: ${_bill.toStringAsFixed(2)}'),
const SizedBox(height: 24),
Text('Tip: ${_tipPercent.round()}%', style: const TextStyle(fontSize: 20)),
Slider(
value: _tipPercent,
min: 0,
max: 30,
divisions: 6,
onChanged: (double value) {
setState(() {
_tipPercent = value;
});
},
),
Text('Tip amount: ${tip.toStringAsFixed(2)}'),
],
),
),
);
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Apps interaktiv gestalten
1Schaltflächen
Deine erste SchaltflächeIn der Konsole ausgebenText- und umrandete SchaltflächenSymbol-SchaltflächenDer Floating Action Button7Schalter und Schieberegler
Ein und aus mit einem SchalterEin Kästchen ankreuzenEinen Wert mit einem Schieberegler auswählen5Entscheidungen
bool und der ?: OperatorEntscheidungen mit if und elseAnd, Or und Not in DartEin Widget ein- und ausblendenEinen Button ausgrauen8Projekt: Trinkgeldrechner
Trinkgeldrechner: Die RechnungTrinkgeldrechner: Das TrinkgeldÜbe selbstständig: Online-Flutter-Compiler