Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振:编辑完成和提交之间的文本字段差异_Flutter_Dart - Fatal编程技术网

Flutter 颤振:编辑完成和提交之间的文本字段差异

Flutter 颤振:编辑完成和提交之间的文本字段差异,flutter,dart,Flutter,Dart,我试图找出onEdittingComplete和onSubmitted之间的区别,我不知道什么时候应该使用后者,因为前者可以用来切换焦点或提交表单内容 我试着查看文档,但是没有太多关于onSubmitted属性的说明。onSubmitted: final ValueChanged<String> onSubmitted final VoidCallback onEditingComplete 它类似于onSubmitted,但在回调中不返回值,而是更新文本controller,然

我试图找出
onEdittingComplete
onSubmitted
之间的区别,我不知道什么时候应该使用后者,因为前者可以用来切换焦点或提交表单内容


我试着查看文档,但是没有太多关于
onSubmitted
属性的说明。

onSubmitted:

final ValueChanged<String> onSubmitted
final VoidCallback onEditingComplete

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

onSubmitted

如名称所示,当用户完成编辑时会调用它,例如按键盘上的“完成”或“发送”。回调可以方便地将值传递给您,这样您就可以使用它执行业务逻辑。同时,由于颤振假设用户“完成”,它将隐藏屏幕键盘

onEditingComplete

这更像是一个“事件”,告诉您用户已完成编辑。它在提交之前被激发。它不会向您传递值(虽然从技术上讲,您可以使用控制器获取值,但这不是本文的目的),因为您仍然可以在提交的
中处理与值相关的业务逻辑。无论如何,这两个事件都会发生

onEditingComplete
背后的真正目的是,在默认实现中,当键盘动作被激活时,flatter隐藏屏幕上的键盘 视为“完成”操作,如“完成”、“开始”、“发送”或“搜索”,但如果操作为“未完成”,如“下一步”或“上一步”,则不会隐藏键盘。(可以通过
TextField
小部件的
textInputAction
属性修改键盘操作。)

如果你不喜欢这种行为,你应该改变它。例如,“发送”在这里被视为“完成动作”,因此在即时消息(聊天)应用程序中,用户每次发送短消息时,键盘都会折叠,这是不好的。但是,如果我们将
onEditingComplete
回调重写为空函数,它将停止默认行为,而不会隐藏键盘。例如:

TextField(
  controller: _controller,
  onSubmitted: (text) {
    sendMessage(text);
    _controller.clear();
  },
  onEditingComplete: () {},
  textInputAction: TextInputAction.send,
)
演示:


相反,它会更新文本控制器。不是每次输入或删除字符时控制器都会自动更新吗?我认为textController会这样做,但onEditingComplete是一种回调机制,它告诉我们文本编辑已经完成,现在我们可以使用该值。