删除键盘时,TextField中的文本消失
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了删除键盘时,TextField中的文本消失相关的知识,希望对你有一定的参考价值。
当我从视图中删除键盘时,在我的TextField
小部件中输入的文本消失了。
有两个TextField
的标题和描述。上述问题仅发生在标题上,而不是描述中。
以下是build
方法的相关摘录:
@override
Widget build(BuildContext context) {
_note = widget._note; // This is coming from StatefulWidget Class above
TextStyle textStyle = Theme.of(context).textTheme.title;
_titleController.text = _note.title;
_descriptionController.text = _note.description;
return Scaffold(
body: ListView(
children: <Widget>[
Padding(
padding: EdgeInsets.all(15.0),
child: TextField(
style: textStyle,
controller: _titleController,
decoration: InputDecoration(
labelText: "Title",
labelStyle: textStyle,
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(5.0))),
),
),
Padding(
padding: EdgeInsets.all(15.0),
child: TextField(
style: textStyle,
controller: _descriptionController,
decoration: InputDecoration(
labelText: "Description",
labelStyle: textStyle,
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(5.0))),
),
),
...
}
}
答案
这是因为您在build
方法中设置文本。可以随时调用此build
方法,例如当键盘收缩时,因为UI需要对此作出反应。
这意味着您应该将此代码移动到initState
:
@override
void initState() {
_note = widget._note;
_titleController.text = _note.title;
_descriptionController.text = _note.description;
super.initState();
}
当您的小部件插入构建树时,仅调用一次initState
。
我不知道为什么这只发生在TextFields
之一。我假设您正在使用其他地方的TextController
设置Note
的内容,这可能会导致此行为。
此外,当您从_
访问它时,您应该避免在_note
(StatefulWidget
)中使用widget._note
的前导下划线State
。
以上是关于删除键盘时,TextField中的文本消失的主要内容,如果未能解决你的问题,请参考以下文章