如何在颤振中保留文本字段中的文本?

How to retain text in textfields in flutter?

如果在 flutter 中的一个屏幕中有多个文本字段被编辑为合适的文本,并且当用户移动到其他屏幕并返回到文本字段所在的同一屏幕时从该屏幕编辑。我应该如何确保这些文本字段具有在字段中输入的相同文本而不是在屏幕中删除的文本。

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

您应该将输入文本存储在一个变量中,这样如果您 return 进入该屏幕,它要么会保留状态,要么您可以重建,但是由于您将文本存储在一个变量中,您仍然可以向用户展示。使用 TextEditingController 并相应地设置其 text 属性 例如,

TextEditingController _controller = TextEditingController();

然后

_controller.text = <variable>

看看这个post

TextEditingController 添加到您的 TextField 并仅在推送其他页面后调用 controller.clear()

这可以通过在 onPressed 函数中使用 await 来完成,或者如果您希望避免使 onPressed' function 异步,则可以使用 .then() 回调` .

例子-

//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();
   });
}
TextEditingController emailController = new TextEditingController();

//Get Value
TextField(
 controller: emailController,
 obscureText: true,
 textAlign: TextAlign.left,
 decoration: InputDecoration(
 border: InputBorder.none,
 hintText: 'PLEASE ENTER YOUR EMAIL',
 hintStyle: TextStyle(color: Colors.grey),
 ),
)
emailController.text
`