Trinkgeldrechner: Pro Person
Teil des Abschnitts Apps interaktiv gestalten der Flutter-Journey von Coddy. Lektion 33 von 34.
Nun zur Antwort auf die Frage, wozu die App dient: Wie viel jede Person zahlt. Das ergibt sich aus allem anderen, also ist es ein weiteres final am Anfang von build, nach tip:
final double each = (_bill + tip) / _people;Die Klammern sind wichtig. Dart dividiert vor dem Addieren, wie im Mathematikunterricht, daher würde _bill + tip / _people nur das Trinkgeld aufteilen.
Der Betrag erhält ein Dollarzeichen, und in einer Dart-Zeichenkette leitet $ eine Variable ein. Um das Zeichen selbst anzuzeigen, setze einen Backslash davor: \$. Dann folgt das echte ${...}:
Text('Each person pays \$${each.toStringAsFixed(2)}')Aufgabe
Einfach- Berechne am Anfang von
build, was jede Person zahlt: die Rechnung plus das Trinkgeld, aufgeteilt auf die Personen. - Zeige es unten in Schriftgröße
28und fett an:Each person pays $44.00bei einer Rechnung von 40, einem Trinkgeld von 10 % und 1 Person.
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;
int _people = 1;
@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)}'),
const SizedBox(height: 24),
Row(
children: [
Text('People: $_people', style: const TextStyle(fontSize: 20)),
const SizedBox(width: 16),
IconButton(
icon: const Icon(Icons.remove),
onPressed: _people > 1
? () {
setState(() {
_people--;
});
}
: null,
),
IconButton(
icon: const Icon(Icons.add),
onPressed: () {
setState(() {
_people++;
});
},
),
],
),
],
),
),
);
}
}
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