Objectif
- Dans ce tutoriel, nous allons vous montrer comment effacer le texte saisi de
TextField ou TextFormField par programme ou après un click sur un bouton dans Flutter.
- Apprendre à effacer un
TextField sur certaines actions.
Présentation
- TextField et TextFormField sont les deux widgets les plus courants pour obtenir l’entrée de l’utilisateur.
- Ils peuvent être utilisés pour créer des formulaires, des pages de connexion, etc. Afin de rendre leur mise en œuvre efficace et précise, nous devons ajouter certaines fonctionnalités. Dans cet article, nous allons apprendre à effacer TextField ou un TextFormField.
Méthodes pour vider un TextField dans Flutter
- Il existe plusieurs méthodes pour vider un TextField dans Flutter :
- Utiliser la propriété "controller" : Il est possible de définir un "TextEditingController" pour un TextField et de vider la valeur en utilisant la méthode "clear()" de ce controller.
- Utiliser un "FormField" : Il est possible d'utiliser un "FormField" pour gérer les données d'un formulaire, y compris les TextFields. Il est alors possible de vider la valeur en utilisant la méthode "reset()" de ce FormField.
- Utiliser un "FocusNode" : Il est possible de définir un "FocusNode" pour un TextField et de vider la valeur en utilisant la méthode "unfocus" pour retirer le focus du TextField, ce qui déclenche un appel à "onChanged" avec une valeur vide.
- Utiliser un "TextField" : Il est possible de définir un "TextField" directement et de vider la valeur en utilisant la propriété "onChanged" pour récupérer la valeur lorsque celle-ci change, et la remplacer par une valeur vide.
- Utiliser un "StreamBuilder" : Il est possible d'utiliser un "StreamBuilder" pour écouter les changements de valeur d'un TextField et de vider la valeur en utilisant la méthode "add" avec une valeur vide pour ajouter une valeur vide dans le stream.
Utiliser un bouton pour vider TextField
- Étape 6 : Créez une variable finale de type
TextEditingController(). Cette variable est utilisée pour accéder à diverses propriétés et méthodes de notre widget TextField: final valeurTextFieldController = TextEditingController(); ou encore on peut écrire TextEditingController valeurTextFieldController = TextEditingController();.
- Étape 7 : Créez une fonction viderTextField(). Vous pouvez le nommer en conséquence:
void viderTextField() {
valeurTextFieldController.clear();
//ou utilisez:
//valeurTextFieldController.text = "";
} .
- Étape 8 : Créez le widget TextField et liez-le sa propriété controller au variable de type créée précédemment:
TextField(controller: valeurTextFieldController,......
- Étape 9 : Créez un bouton et liez-le à la méthode viderTextField() que nous avons créée à l'étape précédente.
Code source complet pour le fichier main.dart:
Cliquez ici
import 'package:flutter/material.dart';
void main() => runApp(const Home());
class Home extends StatefulWidget {
const Home({super.key});
@override
State createState() => _HomeState();
}
class _HomeState extends State {
//TextEditingController valeurTextFieldController = TextEditingController();
final valeurTextFieldController = TextEditingController();
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
title: const Text("Effacer le texte du TextField"),
backgroundColor: Colors.deepPurpleAccent,
),
body: Container(
alignment: Alignment.center,
padding: const EdgeInsets.all(20),
child: Column(
children: [
TextField(
controller: valeurTextFieldController,
decoration: const InputDecoration(
hintText: "Saisissez vos remarques",
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
width: 2,
color: Color.fromARGB(255, 99, 82, 255)))),
),
//Ajouter un espace
const SizedBox(
height: 10,
),
ElevatedButton(
onPressed: () {
viderTextField();
},
child: const Text("Vider le contenu du TextField"))
],
),
),
),
);
}
void viderTextField() {
valeurTextFieldController.clear();
//ou utilisez:
//valeurTextFieldController.text = "";
}
}
Utiliser un icone pour vider TextField
- Presque toutes les étapes, dans ce cas, seraient similaires aux étapes mentionnées ci-dessus, la seule différence serait d'ajouter l'icône claire au lieu du bouton en relief.
- Pour afficher le bouton clear, on utilise la propriété suffixIcon de la classe InputDecroation:
suffixIcon: IconButton(
icon: const Icon(Icons.clear), onPressed: viderTextField)
)
Code source complet pour le fichier main.dart:
Cliquez ici
import 'package:flutter/material.dart';
void main() => runApp(const Home());
class Home extends StatefulWidget {
const Home({super.key});
@override
State createState() => _HomeState();
}
class _HomeState extends State {
//TextEditingController valeurTextFieldController = TextEditingController();
final valeurTextFieldController = TextEditingController();
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
title: const Text("Effacer le texte du TextField"),
backgroundColor: Colors.deepPurpleAccent,
),
body: Container(
alignment: Alignment.center,
padding: const EdgeInsets.all(20),
child: Column(
children: [
TextField(
decoration: InputDecoration(
hintText: "Saisissez vos remarques",
focusedBorder: const OutlineInputBorder(
borderSide: BorderSide(
width: 2, color: Color.fromARGB(255, 99, 82, 255)),
),
suffixIcon: IconButton(
icon: const Icon(Icons.clear), onPressed: viderTextField),
),
controller: valeurTextFieldController,
// clear text),
),
//Ajouter un espace
const SizedBox(
height: 10,
),
ElevatedButton(
onPressed: () {
viderTextField();
},
child: const Text("Vider le contenu du TextField"))
],
),
),
),
);
}
void viderTextField() {
valeurTextFieldController.clear();
//ou utilisez:
//valeurTextFieldController.text = "";
}
}
Utiliser un "FocusNode" pour vider un TextField dans Flutter
- Tout d'abord, nous devons créer un
FocusNode pour notre TextField. Nous pouvons le faire en déclarant une variable de FocusNode dans notre classe de widget:
FocusNode _focusNode = FocusNode();
- Ensuite, nous devons assigner ce FocusNode à notre TextField en utilisant la propriété "focusNode" lors de la création de notre TextField:
TextField(
focusNode: _focusNode,
// ...
)
- Maintenant, nous devons créer un bouton pour vider notre TextField. Nous pouvons utiliser un bouton simple comme "TextButton" et définir une fonction pour gérer l'événement de clic:
TextButton(
child: Text("Vider"),
onPressed: _clearTextField,
)
- Dans la fonction _clearTextField, nous allons utiliser le
FocusNode pour enlever le focus de notre TextField, puis utiliser la propriété "controller" pour réinitialiser la valeur à vide:
void _clearTextField() {
_focusNode.unfocus();
_textController.clear();
}
- N'oubliez pas de déclarer un
TextEditingController pour notre TextField si vous n'en avez pas déjà un:
TextEditingController _textController = TextEditingController();
Et finalement, assignez-le à la propriété "controller" de notre TextField:
Copy code
TextField(
focusNode: _focusNode,
controller: _textController,
// ...
)
- Voilà, maintenant lorsque vous cliquez sur le bouton "Vider", le focus sera enlevé de notre TextField et sa valeur sera réinitialisée à vide.
Application
App01
- Pour vider un TextField dans Flutter, il est possible d'utiliser la propriété "controller" pour récupérer un objet de type TextEditingController et utiliser la méthode "clear()" pour vider le contenu du TextField. Il est également possible de remplacer le contenu par une chaîne vide en utilisant la propriété "text" du controller.
- Réaliser un exemple illustrant cette méthode
Cliquez ici
TextEditingController _textController = TextEditingController();
// ...
TextField(
controller: _textController,
),
// ...
// Pour vider le TextField
_textController.clear();
// ou
_textController.text = "";
App02
- Il s'agit d'un exercice des plus classiques en programmation. L'objectif est de créer un container qui contient deux TextFields et un bouton de commande.
- Le fait de cliquer sur le bouton additionne le contenu des deux TextFields
- L'image ci-dessous est une représentation de ce qui est demandé

Solution
Visitez la page suivante