Flutter点击输入框外空白处隐藏输入法

Posted 程序员磊哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter点击输入框外空白处隐藏输入法相关的知识,希望对你有一定的参考价值。

之前在做android开发时,被要求实现点击输入框外的空白区域时,隐藏输入法。相对于ios,Android端实现起来略显复杂,需要拦截触摸事件自行处理。


好在现在有了Flutter,可以很方便地解决这个问题。由于使用Flutter写出的代码在iOS/Android端的行为几乎一致,也不用担心被要求Android端所有的操作与行为必须跟iOS一模一样了。



获取点击事件并隐藏输入法

实现起来非常简单,这也是Flutter具有优势的地方。

要侦测用户点击了输入框之外的区域,我们需要在页面内容的Widget外增加一个GestureDetector,当用户点击到空白区域时,我们将输入框的焦点取消掉,相应地输入法也会隐藏掉。


body: GestureDetector(
behavior: HitTestBehavior.translucent,
onTap: () {
if (mobileFocusNode.hasFocus) {
mobileFocusNode.unfocus();
} else if (passwordFocusNode.hasFocus) {
passwordFocusNode.unfocus();
}
},
child: _buildLoginContent(context),
),


注意这里的

behavior: HitTestBehavior.translucent


如果不加这句,当用户点击空白区域时,如果该区域没有任何元素则不会触发onTap()事件。加上后则可以正常触发。


GestureDetector是Flutter检测手势事件的Widget,做过Android开发的朋友都知道,Android中关于手势事件传递和处理非常复杂。而GestureDetector非常“聪明”地帮我们处理了事件监听。


另外需要提醒一下,在dispose()方法中也需要隐藏掉输入法,否则跳转页面时偶尔输入法不能正常隐藏:

@override
void dispose() {
if (mobileFocusNode.hasFocus) {
mobileFocusNode.unfocus();
} else if (passwordFocusNode.hasFocus) {
passwordFocusNode.unfocus();
}
super.dispose();
}


代码可以点击这里在Github上下载。


以上是关于Flutter点击输入框外空白处隐藏输入法的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 空白处关闭键盘输入

Flutter 空白处关闭键盘输入

Vue - 实现双击显示编辑框;自动聚焦点击的显示框;点击编辑框外的地方,隐藏编辑框

只点击空白处才隐藏div的方法

自定义弹框,点击提示框外空白区域,让弹框消失

IOS下H5的input/textarea元素失去焦点时隐藏键盘