📜  在Flutter清除TextField

📅  最后修改于: 2021-05-20 07:08:55             🧑  作者: Mango

TextFieldTextFormField是从用户那里获取输入的两个最常见的小部件。它们可以用于制作表格,登录页面等。为了使它们的实施有效而准确,我们需要添加某些功能。在本文中,我们将学习如何在某些操作上清除TextField

您的应用程序中可能存在某些情况,您可能需要清除文本字段。假设您正在创建一个表单,提交后将您重定向到新页面,如果现在返回,则输入的文本仍将存在,这并不表示UI良好。因此,在这种情况下,将要求您在提交后清除TextField

使用按钮清除TextField:

第1步:创建一个新项目并启动main。dart文件。清除现有代码。

第2步:导入材料。dart文件

import 'package:flutter/material.dart';

步骤3:创建将调用runApp()方法的主方法,并将类的名称传递给此方法。

void main() => runApp(MyApp());

步骤4:创建扩展无状态小部件的根类MyApp()并将TextField小部件添加为子级。

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
        appBar: AppBar(
        title: Text('GeeksforGeeks'),
        backgroundColor: Colors.green,
        ),
        body: Center(
          child: TextField()
        )
      )
    );
  }
}      

步骤5:创建一个类型为TextEditingController()的最终变量。此变量用于访问TextField的各种属性和方法。

final fieldText = TextEditingController();

步骤6:创建一个函数clearText()。您可以据此命名。在此函数添加fieldText.clear();

如上所述, TextEditingController()具有各种属性其中之一是clear(),我们将使用它来清除TextField

void clearText() {
    fieldText.clear();
  }

步骤7:创建一个按钮,并将其链接到我们在上一步中创建的clearText()方法。现在,只要您按一下此按钮, TextField就会被清除。

代码 :

Dart
import 'package:flutter/material.dart';
  
void main() => runApp(MyApp());
  
class MyApp extends StatelessWidget {
  final fieldText = TextEditingController();
  
  void clearText() {
    fieldText.clear();
  }
  
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
        title: Text('GeeksforGeeks'),
        backgroundColor: Colors.green,
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Container(
                width: 250,
                child: TextField(
                  decoration: InputDecoration(
                    hintText: 'Enter Something',
                    focusColor: Colors.green,
                  ),
                  controller: fieldText,
                ),
              ),
              SizedBox(height: 15,),
              RaisedButton(
                onPressed: clearText,
                color: Colors.green,
                child: Text('Clear'),
                textColor: Colors.white,
              ),
            ],
          ),
        ),
      ),
    );
  }
}


Dart
import 'package:flutter/material.dart';
  
void main() => runApp(MyApp());
  
class MyApp extends StatelessWidget {
  final fieldText = TextEditingController();
  
  void clearText() {
    fieldText.clear();
  }
  
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('GeeksforGeeks'),
          backgroundColor: Colors.green,
        ),
        body: Center(
          child: Container(
            width: 250,
            child: TextField(
              decoration: InputDecoration(
                hintText: 'Enter Something',
                focusColor: Colors.green,
                suffixIcon: IconButton(
                  icon: Icon(Icons.clear),
                  onPressed: clearText,
                ),
              ),
              controller: fieldText,
            ),
          ),
        ),
      ),
    );
  }
}


上面的代码创建一个带有RaisedButtonTextField 每当您在TextField中输入内容并按下按钮时,TextField都会被清除。以下是上述实现的输出。

输出 :

确实有必要添加此功能,因为如果将新屏幕推到包含表单的屏幕上方,然后又返回到表单,则值仍然存在。

使用清除图标清除TextField

另外,如果您想在文本字段本身中添加一个清晰的图标,那么我们也会看到它。

下面是上述情况的图像:

在这种情况下,几乎所有步骤都将与上述步骤相似,唯一的区别是将添加清除图标而不是“升高按钮”。

TextField(
   decoration: InputDecoration(
      hintText: 'Enter Something',
      focusColor: Colors.green,
      suffixIcon: IconButton(     // Icon to 
         icon: Icon(Icons.clear), // clear text
         onPressed: clearText,
    ),
  ),
   controller: fieldText,
),

在上述代码中,有一个TextField并在其后添加了suffixIcon作为装饰。 clearText方法与以上代码中使用的方法相同。

完整的代码:

Dart

import 'package:flutter/material.dart';
  
void main() => runApp(MyApp());
  
class MyApp extends StatelessWidget {
  final fieldText = TextEditingController();
  
  void clearText() {
    fieldText.clear();
  }
  
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('GeeksforGeeks'),
          backgroundColor: Colors.green,
        ),
        body: Center(
          child: Container(
            width: 250,
            child: TextField(
              decoration: InputDecoration(
                hintText: 'Enter Something',
                focusColor: Colors.green,
                suffixIcon: IconButton(
                  icon: Icon(Icons.clear),
                  onPressed: clearText,
                ),
              ),
              controller: fieldText,
            ),
          ),
        ),
      ),
    );
  }
}

输出 :