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是一种回调机制,它告诉我们文本编辑已经完成,现在我们可以使用该值。