Как сохранить текст в текстовых полях при флаттере? - PullRequest
0 голосов
/ 11 июля 2020

Если есть несколько текстовых полей на экране во флаттере, которые редактируются для получения подходящего текста и с этого экрана, когда пользователь переходит на другой экран и возвращается на тот же экран, где находятся текстовые поля. Как мне убедиться, что эти текстовые поля содержат тот же текст, который был введен в поля, а не удален с экрана.

TextField(
  decoration: InputDecoration(
    border: InputBorder.none,
    hintText: 'Enter a search term'
  ),
);

Ответы [ 2 ]

2 голосов
/ 11 июля 2020

Вы должны сохранить введенный текст в переменной, поэтому, если вы вернетесь к этому экрану, он либо сохранит состояние, либо вы можете перестроить, но, поскольку у вас есть текст, сохраненный в переменной, вы все равно сможете показать это пользователю. Используйте TextEditingController и установите его свойство text соответственно. Например,

TextEditingController _controller = TextEditingController();

Затем

_controller.text = <variable>

Взгляните на это сообщение

1 голос
/ 11 июля 2020

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

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

Пример -

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

//Set the _controller on your both TextFields
TextField(
  controller: _controller1,
  //Rest of your code
)

TextField(
  controller: _controller2,
  //Rest of your code
)

//Values Remain Same after pushing the new page with this
onPressed: () {
   Navigator.push(context, new MaterialPageRoute(
     builder: (context) => NextPage()
   ))
}

//Clear the controller after pushing the new page with this
onPressed: () {
   Navigator.push(context, new MaterialPageRoute(
     builder: (context) => NextPage()
   )).then((value) {
      //This makes sure the textfield is cleared after page is pushed.
      _controller1.clear();
      _controller2.clear();
   });
}
...