dart Flutter:onEditingComplete和onSubmitted之间的TextField差异

tpxzln5u  于 2023-04-27  发布在  Flutter
关注(0)|答案(3)|浏览(156)

我试图找出onEdittingCompleteonSubmitted之间的区别,我不知道什么时候应该使用后者,因为前者可以用来切换焦点或提交表单的内容。
我试着查看文档,但没有太多关于onSubmitted属性的内容。

h4cxqtbf

h4cxqtbf1#

已提交

顾名思义,当用户完成编辑时,例如按下键盘上的“done”或“send”时,它会被调用。回调函数会方便地将值传递给您,因此您可以使用它执行业务逻辑。同时,由于Flutter假设用户已“完成”,因此它会隐藏屏幕上的键盘。

onEditingComplete

这更像是一个“FYI”,告诉你用户已经完成了编辑。它在**onSubmitted之前被触发。它不会传递值(虽然从技术上讲,你可以使用控制器获取值,但这不是这里的意图),因为你仍然可以在onSubmitted中处理与值相关的业务逻辑。无论如何,这两个事件都会被触发。
onEditingComplete背后的真实的目的是,在默认实现中,当键盘动作被认为是“完成动作”时,Flutter隐藏屏幕上的键盘,例如“完成”,“去”,“发送”或“搜索”,但如果动作是“非完成”,则不隐藏键盘。例如“next”或“previous”。(键盘操作在TextField小部件的textInputAction属性中指定。)
如果你不喜欢这种行为,你可以覆盖它。例如,“send”在这里被认为是一个“completion action”,因此在即时通讯(聊天)应用程序中,用户每次发送短消息时,键盘都会被折叠,这是不好的。但是如果我们将onEditingComplete回调函数覆盖到一个空函数,它将停止默认行为,而不会隐藏键盘。例如:

TextField(
  controller: _controller,
  onSubmitted: (text) {
    sendMessage(text);
    _controller.clear();
  },
  onEditingComplete: () {}, // do not hide keyboard
  textInputAction: TextInputAction.send,
)

演示:

n9vozmp4

n9vozmp42#

提交时间:

final ValueChanged<String> onSubmitted

它在onSubmitted回调中返回TextField输入的值,大多数情况下,当使用TextInputAction.nextTextInputAction.previous执行textInputAction时,它用于键盘的下一个/上一个字段按钮。

onEditingComplete:

final VoidCallback onEditingComplete

它类似于onSubmitted,但不会在回调函数中返回值,而是更新文本controller,然后我们可以在需要的时候从controller中获取值。

bq3bfh9z

bq3bfh9z3#

对于移动的,onEditingComplete在键盘关闭之前调用,onSubmitted在键盘关闭之后调用。

相关问题