在Flutter中弹出时清除TextField中的文本

时间:2019-05-06 10:19:06

标签: flutter uitextfield

我有一个SearchText文本字段。由于一切正常,我想知道当我回到同一页面时如何清除文本字段中的文本。现在,当我从页面返回时,搜索文本仍保留在那里。

条件:我正在将值从字段传递到另一页。因此,搜索文本应包含一些文本。

到目前为止,我所做的是:

  • 试图在推送发生后将文本设置为null。 (我有按钮可以转到另一页)

    onPressed: (){
       Navigator.push(context, new MaterialPageRoute(
         builder: (context) => SearchPage(searchText: this.search.text)
       ));
       setState((){this.search.text = '';});
    }
    

出现问题:在将数据推送到另一页之前,搜索文本变为空。我不要

  • 试图在我的initState()中将文本设置为null,但是pop仅替换将删除堆栈,而不重做页面。因此该页面不会调用initState()

我也尝试这样做:

Navigator.of(context).pop('NoText': '');

但是我不知道如何在主页上搜索文本或进行更新。

我不想再次推送,因为它将再次将同一页添加到堆栈中。

Page 1 -> Page 2 (press back) -> Page 1 (search text = '')

任何帮助将不胜感激。谢谢:)

2 个答案:

答案 0 :(得分:1)

在您的TextEditingController中添加TextField,仅在按下另一页后才调用controller.clear()

这可以通过在await函数内使用onPressed来完成,或者如果您想避免使.then()异步,则可以使用onPressed' function回调。 / p>

示例-

//Initialize a controller inside your State class
TextEditingController _controller = TextEditingController();

//Set the _controller on you TextField
TextField(
  controller: _controller,
  //Rest of your code
)

//Clear the controller after pushing the new page
onPressed: () {
   Navigator.push(context, new MaterialPageRoute(
     builder: (context) => SearchPage(searchText: this.search.text)
   )).then((value) {
      //This makes sure the textfield is cleared after page is pushed.
      _controller.clear();
   });
}

让我知道这是否有帮助!

答案 1 :(得分:0)

这是销毁流行音乐中任何小部件的最佳,最简便的方法,并且可以毫无麻烦地工作。

每次我们弹出任何屏幕时,都会调用

dispose()方法。有关更多信息:-dispose method

class _LoginScreenState extends State<LoginScreen> {

  TextEditingController userIDTextField = TextEditingController();
  TextEditingController passwordTextField = TextEditingController();

  final FocusNode userIDFocus = FocusNode();
  final FocusNode passwordFocus = FocusNode();
  bool showPassword = false;

  // TODO: initState
  @override
  void initState() {
    super.initState();
 }

 // TODO: dispose
 @override
 void dispose() {
   userIDTextField.clear();
   passwordTextField.clear();
   super.dispose();
 }
}