Flutter webview_flutter在Android 12系统下软键盘无法弹出问题
问题根因
Android 12(API 31)对输入法服务的匹配逻辑做了调整,要求InputMethodManager实例必须和当前触发输入的视图所在的Display ID完全匹配,否则会直接拒绝响应输入法弹出请求。你遇到的报错核心逻辑为:WebView所在视图的Display ID为1,但系统调用了全局默认Display(ID为0)的InputMethodManager实例,最终触发Ignoring showSoftInput() as view ... is not served错误,软键盘无法正常弹出。
解决方案
webview_flutter官方包适配方案
- 优先升级
webview_flutter到4.0.0及以上版本,官方已在高版本完成Android 12适配,修改了InputMethodManager的获取逻辑,改为从当前WebView附着的上下文获取实例而非全局ApplicationContext,可自动匹配正确的Display ID - 若暂时无法升级大版本,可在Android原生层添加适配逻辑:自定义WebView包装类,重写输入相关回调,每次触发输入事件时强制从当前WebView的context获取InputMethodManager实例,覆盖系统默认的全局实例
flutter_inappwebview包适配方案
- 升级到6.0.0-beta.24及以上版本,该版本已专门修复Android 12下软键盘无法弹出的适配问题
- 临时兼容方案:在WebView初始化及页面加载完成后,主动调用
requestFocus()方法强制WebView获取焦点,同时在AndroidManifest.xml对应的Activity配置项中添加android:windowSoftInputMode="adjustResize"属性,确保输入法弹出逻辑正常触发
内容的提问来源于stack exchange,提问作者ploth
相关产品推荐
相关产品推荐

