Очистить текст в TextField, когда поп в Flutter - PullRequest
0 голосов
/ 06 мая 2019

У меня есть SearchText TextField. Поскольку все работает, я хочу знать, как очистить текст в текстовом поле, когда я вернусь на ту же страницу. Прямо сейчас, когда я возвращаюсь со страницы, там остается текст для поиска.

Условия: я передаю значение из поля на другую страницу. Таким образом, текст поиска должен иметь некоторый текст.

То, что я сделал до сих пор:

  • Пытался установить текст в нуль после нажатия. (У меня есть кнопка для перехода на другую страницу)

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

Произошла проблема: Текст поиска становится пустым, прежде чем отправлять данные на другую страницу. Который я не хочу.

  • Попытка установить текст в ноль в моем initState(), но pop просто заменяет, удаляет стек, а не повторяет страницу. Так что страница не звонит initState()

Я пытался сделать это также:

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

Но я не знаю, что делать на главной странице для поиска текста или обновления.

Я не хочу нажимать снова, так как он снова добавит ту же страницу в стек.

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

Любая помощь будет принята с благодарностью. Спасибо:)

1 Ответ

1 голос
/ 06 мая 2019

Добавьте TextEditingController к вашему TextField и звоните controller.clear() только после нажатия на другую страницу.

Это можно сделать либо с помощью await внутри функции onPressed, либо вы можете использовать обратный вызов .then(), если хотите избежать * асинхронного onPressed' function.

Пример -

//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();
   });
}

Дайте мне знать, если это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...