在用户使用场景中经常需要用户填写表单或者输入数据,常见的操作就是用户点击某输入框后,打开键盘,用户想切换到其他输入框或放弃输入,直接点击空白区域就关闭了键盘。
在flutter开发中为了达到这个需求,我使用了网上其他码农的方法,在很多方法中都大同小异,按照他们的示例写的代码运行后,点击空白区域还是没有任何反应。不知道是他们版本和我的版本不一样,我的是flutter 26的,但在后面不懈的尝试下,终于弄了一个方法,遂记录下来,方便自己后期补充学习,也方便其他有同样困惑的朋友。
***重要部分***
1、必须要有一个手势事件,将GestureDetector包裹在外层,输入框放在GestureDetector的child中,设置GestureDetector的onTap。
>>>>>>onTap中可以用2中写法去处理空白区域关闭键盘
写法1:在onTap中直接写入FocusManager.instance.primaryFocus.unfocus();即可
onTap: () {
//点击空白节点关闭键盘 //
FocusManager.instance.primaryFocus.unfocus();
},
写法2:在onTap中直接写入FocusScope.of(context).requestFocus(blankNode);,需要在class下声明一个常量final FocusNode _blankNode = FocusNode();
以上代码截图即可完成点击空白区域关闭键盘
基于以上问题还有几个问题,我作为新手也找不到处原因,只是各种尝试后得出,整理出来方法大家采坑。
GestureDetector下的child中最好写一个Center,在dart DevTools中的dubug paint模式下,我们可以看到center铺满了全屏,用户点击任意位置即可关闭键盘。(如图)
或者写Container如下:
对齐,屏幕最大化,让后再里面包裹组件。
反正就是空白区域必须是一个元素吧,才可以
为什么要写个Center(),我是菜鸟我也不知道为啥?反正经过我反复尝试,写个center最方便,写个column或者其他的,只要里面的元素定义了大小,那么在定义的范围外点击,就无法关闭键盘。
此处希望有高手指点下原因