Skip to content

How to Clear a TextField Programatically with Flutter

Flutter, Dart, Mobile Development1 min read

In the world of mobile app development, user input is an essential aspect of creating engaging and interactive experiences. In Flutter, a popular framework for building natively compiled applications for mobile, web, and desktop from a single codebase, managing text input is a common requirement. While users can manually clear input fields, there are scenarios where developers need to programmatically clear text fields based on certain conditions or user actions.

In this article, we will delve into the process of clearing a TextField programmatically in Flutter. We'll explore various methods and provide examples to demonstrate effective implementation.

Setting the Stage

Before we jump into the code, let's set the stage by considering a common scenario where clearing a TextField programmatically becomes necessary. Imagine you have a form with several input fields, and upon the successful submission of the form, you want to clear all the input fields to allow the user to enter new data without manual intervention. This is just one of many situations where programmatically clearing a TextField comes into play.

The TextEditingController Approach

One of the most straightforward ways to clear a TextField programatically in Flutter is by using a TextEditingController. This approach involves creating an instance of TextEditingController and associating it with the TextField widget. By manipulating the controller, we can easily clear the text inside the TextField.

Let's take a look at an example:

1class ClearTextFieldExample extends StatefulWidget {
2 @override
3 _ClearTextFieldExampleState createState() => _ClearTextFieldExampleState();
6class _ClearTextFieldExampleState extends State<ClearTextFieldExample> {
7 TextEditingController _textEditingController = TextEditingController();
9 void clearTextField() {
10 _textEditingController.clear();
11 }
13 @override
14 Widget build(BuildContext context) {
15 return Scaffold(
16 body: Center(
17 child: Column(
18 mainAxisAlignment:,
19 children: <Widget>[
20 TextField(
21 controller: _textEditingController,
22 ),
23 ElevatedButton(
24 onPressed: () {
25 clearTextField();
26 },
27 child: Text('Clear Text'),
28 ),
29 ],
30 ),
31 ),
32 );
33 }

In this example, we create a TextEditingController instance _textEditingController and associate it with the TextField widget. We then define a clearTextField method that calls the clear() method on the controller, effectively clearing the text within the TextField when the button is pressed.

The GlobalKey Approach

Another approach to clear a TextField programatically is by using a GlobalKey. By assigning a key to the TextField widget, we can access and manipulate its properties, including its text value.

Here's an example demonstrating this approach:

1class ClearTextFieldUsingKeyExample extends StatefulWidget {
2 @override
3 _ClearTextFieldUsingKeyExampleState createState() =>
4 _ClearTextFieldUsingKeyExampleState();
7class _ClearTextFieldUsingKeyExampleState
8 extends State<ClearTextFieldUsingKeyExample> {
9 final GlobalKey<FormFieldState<String>> _textFieldKey = GlobalKey();
11 void clearTextField() {
12 _textFieldKey.currentState?.reset();
13 }
15 @override
16 Widget build(BuildContext context) {
17 return Scaffold(
18 body: Center(
19 child: Column(
20 mainAxisAlignment:,
21 children: <Widget>[
22 TextFormField(
23 key: _textFieldKey,
24 ),
25 ElevatedButton(
26 onPressed: () {
27 clearTextField();
28 },
29 child: Text('Clear Text'),
30 ),
31 ],
32 ),
33 ),
34 );
35 }

In this example, we create a GlobalKey instance _textFieldKey and assign it to the TextFormField widget. The clearTextField method accesses the current state of the key and resets the field, effectively clearing the text.

In closing, we've explored different approaches to clear a TextField programatically in Flutter. By utilizing TextEditingController and GlobalKey along with their associated methods, developers can effectively manage text input and enhance user interactions within their applications.