Flutter中弹出框时如何清除TextField中的文本

3

我有一个名为SearchText的文本框。由于一切都正常,我想知道如何在回到同一页时清除文本框中的文本。现在,当我从页面返回时,搜索文本仍然存在。

条件:我正在将字段的值传递到其他页面。因此,搜索文本应该包含一些文本。

到目前为止我所做的是:

  • Tried to set the text to null after push happens. (I have button to go to another page)

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

问题描述:在将数据推送到另一页之前,搜索文本变为空了。这并不是我想要的。

  • 尝试在initState()中将文本设置为空,但是弹出操作只是替换而非移除堆栈,因此页面不会调用initState()

我也尝试过这样做:

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

但是我不知道在主页上为搜索文本做什么,或者更新它。

我不想再次推送,因为这会将相同的页面再次添加到堆栈中。

页面1 -> 页面2(按返回) -> 页面1(搜索文本 ='')

感谢任何帮助。谢谢 :)

1个回答

9
TextEditingController添加到您的TextField中,并仅在推送其他页面后调用controller.clear()
这可以通过在onPressed函数中使用await,或者如果要避免使onPressed函数异步,可以使用.then()回调来完成。
示例 -
//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();
   });
}

如果这有帮助,请告诉我!


.then() 对我很有用。之前它也一直在工作。谢谢,Siddharth. :) - Alok
1
太好了!很高兴我能帮上忙 :) - thedarthcoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接