【发布时间】:2020-12-20 17:23:14
【问题描述】:
我在搞清楚onEdittingComplete和onSubmitted的区别,不知道什么时候应该用后者,因为前者可以用来切换焦点或者提交表单的内容。
我尝试查看文档,但没有太多关于 onSubmitted 属性的说明。
【问题讨论】:
我在搞清楚onEdittingComplete和onSubmitted的区别,不知道什么时候应该用后者,因为前者可以用来切换焦点或者提交表单的内容。
我尝试查看文档,但没有太多关于 onSubmitted 属性的说明。
【问题讨论】:
提交时
顾名思义,当用户完成编辑时调用它,例如按键盘上的“完成”或“发送”。回调方便地将值传递给您,因此您可以使用它来执行业务逻辑。同时,由于 Flutter 假设用户“完成”,它会隐藏屏幕键盘。
onEditingComplete
这更像是一个“仅供参考”,告诉您用户已完成编辑。它在之前 onSubmitted 被触发。它不会将值传递给您(虽然从技术上讲,您可以使用控制器获取值,但这不是这里的意图),因为您仍然可以在onSubmitted 中处理与值相关的业务逻辑。无论如何,这两个事件都会触发。
onEditingComplete 背后的真正目的是,在默认实现中,Flutter 在键盘操作为
被视为“完成操作”,例如“完成”、“开始”、“发送”或“搜索”,但如果操作是“未完成”,例如“下一个”或“上一个”,则不会隐藏键盘”。 (键盘操作在TextField 小部件的textInputAction 属性中指定。)
如果您不喜欢这种行为,可以覆盖它。例如,“发送”在这里被认为是“完成动作”,因此在即时消息(聊天)应用程序中,用户每次发送短消息时,键盘都会被折叠,这样就不好了。但是如果我们将onEditingComplete 回调覆盖为一个空函数,它将停止默认行为并且不会隐藏键盘。例如:
TextField(
controller: _controller,
onSubmitted: (text) {
sendMessage(text);
_controller.clear();
},
onEditingComplete: () {}, // do not hide keyboard
textInputAction: TextInputAction.send,
)
演示:
【讨论】:
提交时:
final ValueChanged<String> onSubmitted
它在onSubmitted回调中返回TextField输入的值,大部分时间它用于在使用TextInputAction.next和TextInputAction.previous时用于键盘的下一个/上一个字段按钮执行textInputAction。
onEditingComplete:
final VoidCallback onEditingComplete
它类似于onSubmitted,但它不会在回调中返回值,而是更新文本controller,然后我们可以根据需要从controller 中获取值。
【讨论】: