HarmonyOS 鸿蒙Next关于软键盘右上角的隐藏按钮点击之后并没有真的消除输入框的焦点问题

HarmonyOS 鸿蒙Next关于软键盘右上角的隐藏按钮点击之后并没有真的消除输入框的焦点问题

用flutter鸿蒙化时遇到这样一个问题,比如这个场景:用户登录页,有用户名和密码输入,用的是两个TextFormField,当我点击用户名输入框(自动弹起数字键盘)输入完用户名后又点击了密码输入框(自动弹起字母键盘)输入密码后,点击软键盘上的隐藏软键盘按键,这时这个密码的聚焦看着是没了并且返回的焦点监听也是失焦状态,但是其实还在,当我应用跳到前台时就会弹出字母键盘,我还试验出,我在整个页面上有一个onTap点击事件,执行了FocusManager.instance.primaryFocus?.unfocus(),这个代码,当我输入完密码后(没点软键盘上的的隐藏按钮)直接点击页面上的空白区域,就会进行失焦处理,并且应用跳到前台也不会弹出软键盘了,但是当我输入完密码后点击了软键盘的隐藏按钮,再点击空白区域,应用跳到前台还是会弹出软键盘,有解决方案吗?


更多关于HarmonyOS 鸿蒙Next关于软键盘右上角的隐藏按钮点击之后并没有真的消除输入框的焦点问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

感谢您的提问,为了更快解决您的问题,麻烦请补充以下信息:

  • flutter doctor -v信息
  • DevEco版本
  • 样机rom版本

更多关于HarmonyOS 鸿蒙Next关于软键盘右上角的隐藏按钮点击之后并没有真的消除输入框的焦点问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


鸿蒙Next软键盘右上角隐藏按钮点击后未消除输入框焦点的问题,是系统UI事件处理逻辑的缺陷。该按钮仅执行了键盘隐藏操作,但未触发View的clearFocus()方法。可通过在页面的onHideKeyboard回调中手动调用inputView.clearFocus()强制清除焦点。若使用ArkUI,需检查TextInput组件的focusControl绑定状态是否同步更新。此问题可能涉及系统级事件分发机制,需等待后续版本修复。

在HarmonyOS Next中处理软键盘焦点问题时,可以尝试以下解决方案:

  1. 针对Flutter鸿蒙化的TextFormField焦点问题,建议在onFieldSubmitted回调中显式调用unfocus()方法:
TextFormField(
  onFieldSubmitted: (value) {
    FocusScope.of(context).unfocus();
  },
)
  1. 对于页面跳转后键盘自动弹出的问题,可以在页面生命周期方法中强制取消焦点:
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
  if(state == AppLifecycleState.resumed) {
    FocusManager.instance.primaryFocus?.unfocus();
  }
}
  1. 针对软键盘隐藏按钮点击后的残留焦点问题,可以监听键盘关闭事件并手动处理:
SystemChannels.textInput.invokeMethod('TextInput.hide');
  1. 对于页面空白区域点击处理,建议使用WillPopScope或GestureDetector包裹整个页面,确保点击事件能正确触发:
GestureDetector(
  onTap: () {
    FocusManager.instance.primaryFocus?.unfocus();
  },
  child: Scaffold(...),
)

这些方法可以帮助解决HarmonyOS Next中软键盘焦点残留的问题。

回到顶部