Flutter Android中点击TextFormField键盘弹出后立即自动隐藏问题
你的TextFormField代码本身没有明显问题,仅特定页面出现该异常,大概率是页面其他逻辑或布局导致输入框焦点丢失,以下是常见排查方向和解决方案:
检查TextEditingController的初始化位置
确保offerController在initState中初始化,而非build方法内。若每次build都新建控制器,键盘弹出时页面重建会导致控制器重置,直接丢失焦点。正确初始化方式如下:late TextEditingController offerController; @override void initState() { super.initState(); offerController = TextEditingController(); } @override void dispose() { offerController.dispose(); super.dispose(); }排查不必要的setState调用
若页面存在频繁触发的setState(比如监听滚动、定时器或实时更新事件时),键盘弹出的布局变化可能触发额外的setState,导致Widget重建并丢失输入框焦点。检查所有setState的触发时机,确保仅在必要时调用。检查GestureDetector/InkWell的触摸拦截
若页面有全屏GestureDetector(比如用于点击空白处隐藏键盘),其behavior属性可能拦截输入框的触摸事件,导致点击输入框后先触发GestureDetector的onTap(执行失焦操作)。将behavior改为HitTestBehavior.translucent,让输入框触摸事件优先响应:GestureDetector( onTap: () => FocusScope.of(context).unfocus(), behavior: HitTestBehavior.translucent, child: // 页面内容 )确认Scaffold配置
确保页面被Scaffold正确包裹,且未错误设置resizeToAvoidBottomInset。若手动将其设为false,键盘弹出时页面布局不调整,可能导致输入框被遮挡或焦点异常;若需保留该设置,需确保输入框所在区域不会被键盘完全覆盖。检查焦点管理逻辑
排查页面内是否存在手动调用FocusScope.of(context).unfocus()或FocusManager.instance.primaryFocus?.unfocus()的代码,这些代码若在键盘弹出后意外执行(比如异步回调中),会直接导致键盘隐藏。
内容的提问来源于stack exchange,提问作者Karanjeet Singh

