当我从视图中卸下键盘时,在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))),
),
),
...
}
}
Keyboard shown和removed的屏幕截图。
答案 0 :(得分:0)
发生这种情况是因为您正在使用class TestArrayObject extends ArrayObject {
public function displayAsTable() {
$iterator = $this->getIterator();
// Table
echo '<table border="1">';
echo '<tr>';
echo '<th>Keys</th><th>Values</th>';
echo '</tr>';
while ($iterator->valid()) {
echo '<tr>';
echo '<td>'.$iterator->current().'</td><td>'.$iterator->current().'</td>';
echo '</tr>';
$iterator->next();
}
echo '</table>';
}
}
$arrFruits = array('Apple','Banana', 'Mango');
$objArr = new TestArrayObject($arrFruits);
$objArr->displayAsTable();
方法设置文本。此build
方法可以随时调用,例如当键盘收缩时,因为UI需要对此做出反应。
这意味着您应该将此代码移至initState
:
build
@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
。