删除键盘时,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))),
                      ),
                    ),  
           ...
          }
        }

Keyboard shownremoved截图。

答案

这是因为您在build方法中设置文本。可以随时调用此build方法,例如当键盘收缩时,因为UI需要对此作出反应。 这意味着您应该将此代码移动到initState

@override
void initState() {
  _note = widget._note;
  _titleController.text = _note.title;
  _descriptionController.text = _note.description;
  super.initState();
}

当您的小部件插入构建树时,仅调用一次initState

我不知道为什么这只发生在TextFields之一。我假设您正在使用其他地方的TextController设置Note的内容,这可能会导致此行为。 此外,当您从_访问它时,您应该避免在_noteStatefulWidget)中使用widget._note的前导下划线State

以上是关于删除键盘时,TextField中的文本消失的主要内容,如果未能解决你的问题,请参考以下文章

软输入键盘隐藏编辑文本

键盘出现/消失时调整带有 TextField 的 SwiftUI 列表

TextField 问题中的 TextSelection

当键盘出现并启用滚动时,TextField 向上移动

快速禁用 UIwebView textField 中的键盘

隐藏在键盘后面的文本字段