likes
comments
collection
share

【避坑】Flutter 有密码输入框时,键盘无故收起的问题解决

作者站长头像
站长
· 阅读数 4

前言

有掘友遇到这样一个问题,登录的时候,输入用户名时正常弹出键盘,但是输入密码的时候键盘会消失,需要再次点击一次才会出现键盘。而如果先输入密码,再输入用户名也一样,这个问题只在安卓机出现,而苹果手机没问题。情况像下面这样。

【避坑】Flutter 有密码输入框时,键盘无故收起的问题解决

问题定位

从苹果机没有,而安卓机有,而且只有密码输入的时候才有这种情况,似乎可能是 Flutter 的键盘兼容性问题。然后用安卓模拟器跑了一下,又没什么问题。只能上网搜了。搜的方式换了好几个,最终在谷歌通过 “flutter keyboard disappear password” 这个搜索才找到对应的问题。在 Flutter 的 github 上反映这个问题的还不少,但是都有一个特点,那就是看机型都是我们国产的机型,比如:

【避坑】Flutter 有密码输入框时,键盘无故收起的问题解决

【避坑】Flutter 有密码输入框时,键盘无故收起的问题解决

【避坑】Flutter 有密码输入框时,键盘无故收起的问题解决 不过要表扬一下红米,红米没有输入密码使用安全选项(不过反馈问题的是老外,可能使用的是国外版本)。

【避坑】Flutter 有密码输入框时,键盘无故收起的问题解决

从红米的反馈来看,似乎是输入密码使用安全键盘的影响。我拿自己的荣耀手机试了一下,确实输入选项有个安全输入设置,默认是开启的,如下图:

【避坑】Flutter 有密码输入框时,键盘无故收起的问题解决

然后我把这个开关关了之后,果然问题消失了!显然就是这个安全输入导致的,估计就是因为安全输入需要切换另一种键盘,而 Flutter 没有考虑这个情况,导致出现这样的问题。

问题解决

看 Flutter 的 issue(issue:68571)目前还是处于未关闭的状态,说明这个问题目前还没解决。往下看,有大神给出了他们的解决方案:

【避坑】Flutter 有密码输入框时,键盘无故收起的问题解决

其实就是额外增加了一个 Listener 组件,以监听触控事件。当监听到获取焦点后,使用 FocusScope 来给对应的 FocusNode 请求聚焦,从而主动弹出键盘。试了一下,果然有效👍🏻。当然这种方法也说了可能会有性能上的损失,不过一般输入密码这种界面和业务都比较简单,对应用的整体性能影响很小。

总结

本篇介绍了如何解决 Flutter 的有密码输入框时,键盘在部分安卓机上无故消失的问题,前人踩坑,后人避坑。

实际上解决这个问题有两个方法,一个是禁用安全输入,不过这个决定权不在开发者那边;另一个就是使用 Listener 组件包裹输入框组件,通过监听触控事件,主动获取焦点弹出键盘。本篇其实更多的是告诉大家一种遇到坑的时候,该如何解决的方法 —— 善用搜索!