卸下键盘后,TextField中的文本消失

时间:2019-04-14 07:29:13

标签: flutter

当我从视图中卸下键盘时,在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 shownremoved的屏幕截图。

1 个答案:

答案 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