Calculateur de pourboire : Les personnes
Fait partie de la section Rendre l’application interactive du Journey Flutter de Coddy. Leçon 32 sur 34.
Une facture est souvent partagée. Ajoute une ligne avec le nombre de personnes et deux boutons icônes, moins et plus, comme le compteur que tu as créé dans « Un compteur qui augmente et diminue ».
Il y a toujours au moins une personne qui paie, donc le bouton moins devient grisé à 1. Un IconButton devient grisé de la même façon que les autres boutons, avec onPressed: null. Lorsque la fonction est courte, tu peux l’écrire directement dans le ? : :
onPressed: _people > 1
? () {
setState(() {
_people--;
});
}
: null,Un SizedBox(width: 16) dans la ligne éloigne un peu les boutons du texte.
Défi
Facile- Conservez le nombre de personnes dans
int _people = 1; - Sous le montant du pourboire, ajoutez un
RowavecPeople: 1, unIconButtonavecIcons.removeet un autre avecIcons.add. - Le signe plus ajoute une personne. Le signe moins en enlève une, et il est grisé lorsque le nombre est égal à 1.
Essayez vous-même
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)}'),
],
),
),
);
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Rendre l’application interactive
1Boutons
Votre premier boutonAfficher dans la consoleBoutons textuels et à contourBoutons avec icôneLe bouton d’action flottant7Interrupteurs et curseurs
Allumer et éteindre avec un interrupteurCocher une caseChoisir une valeur avec un curseur5Décisions
bool et l’opérateur ?: Prendre des décisions avec if et elseAnd, Or et Not dans DartAfficher et masquer un widgetGriser un bouton8Projet : Calculateur de pourboire
Calculateur de pourboire : L’additionCalculateur de pourboire : Le pourboireEntraînez-vous par vous-même : Compilateur Flutter en ligne