🛢️Parcours Fioul GroupéFlutter · Chapitre 14
Accueil › Flutter › Chapitre 14
Chapitre 14 / 19

Les formulaires

Saisir et valider des données : le widget Form, les TextFormField avec validateurs, la clé de formulaire et les contrôleurs.

1 Notion

Form & GlobalKey

Un Form regroupe les champs ; une GlobalKey<FormState> permet de le valider et de le soumettre d'un coup.

final _cle = GlobalKey<FormState>();
Form(key: _cle, child: Column(children: [ /* champs */ ]))
2 Notion

TextFormField & contrôleur

Un TextEditingController lit la saisie ; InputDecoration ajoute label et aide.

final _litres = TextEditingController();
TextFormField(
  controller: _litres,
  keyboardType: TextInputType.number,
  decoration: const InputDecoration(labelText: 'Litres'),
)
3 Notion

Valider les champs

Chaque champ a un validator qui renvoie un message d'erreur (ou null si valide). Aligné sur les règles du serveur (chapitre Spring 5).

validator: (v) {
  final n = int.tryParse(v ?? '');
  if (n == null || n < 500) return 'Minimum 500 L';
  return null;
}
4 Étape

Soumettre le formulaire

On valide, puis on envoie à l'API (POST du chapitre 13).

onPressed: () async {
  if (_cle.currentState!.validate()) {
    await service.rejoindre(id, Commande(
      litres: int.parse(_litres.text), commune: ..., adresse: ...));
    if (context.mounted) Navigator.pop(context, true);
  }
}
🛢️ Sur le projet Fioul Groupé

Construis le formulaire « rejoindre » : litres (≥ 500), commune, adresse, avec validation. À la soumission, POST vers l'API et retour à l'écran de détail (rafraîchi). Double validation client + serveur (sécurité).

À retenir
  • Form + GlobalKey<FormState> pour valider/soumettre.
  • TextFormField + TextEditingController + validator.
  • Valider avant d'envoyer ; règles alignées sur le serveur.
← Chapitre 13