Flutter 模拟器与真机环境下输入键盘唤起后立即消失问题求助
问题排查与修复方案
- 修正Modal Bottom Sheet核心配置:弹出弹窗时必须传入
isScrollControlled: true,在弹窗最外层添加底部边距适配,边距值绑定MediaQuery.viewInsetsOf(context).bottom,避免弹窗因软键盘弹起的高度变动触发焦点异常回收。 - 校准焦点节点逻辑:
- 不要在组件build流程中重复创建绑定TextField的
FocusNode - 排查弹窗点击回调里是否误加了
FocusScope.of(context).unfocus()类强制失焦逻辑 - 若需弹窗弹出后自动唤起键盘,需将焦点请求逻辑放到帧渲染完成回调中执行,不要在初始build阶段直接调用
_komNode.requestFocus()
对应的代码示例:
WidgetsBinding.instance.addPostFrameCallback((_) { _komNode.requestFocus(); }); - 不要在组件build流程中重复创建绑定TextField的
- 针对compile SDK 28的历史bug,无需降级编译版本,直接修改Android端配置即可绕开:在AndroidManifest.xml对应的Activity配置项里,将软键盘调整模式设置为
adjustResize,完全兼容现有项目的编译配置、不影响Sound Null Safety相关代码运行。 - 排查动态宽度逻辑的副作用:代码中
width: hasText ? 300 : 350的动态宽度切换逻辑,需要确认状态变化时没有强制销毁、重建TextField组件树——如果输入框在键盘弹起的瞬间被连带重绘销毁,系统就会自动关闭键盘,表现为软键盘闪一下消失。可以将动态宽度的容器替换为AnimatedContainer做宽度过渡,避免输入框本身被连带重构。 - 给TextField手动设置
scrollPadding: EdgeInsets.all(20),修正输入框与软键盘的高度计算逻辑,避免因高度计算冲突触发的焦点回收。
内容的提问来源于stack exchange,提问作者Ryan Wang
相关产品推荐
相关产品推荐

