Flutter 如何保持 TextField 焦点并隐藏键盘和光标?
数据阿明
结论
将 keyboardType 设为 TextInputType.none,并设置 showCursor: false。保留 readOnly: false,TextField 才能继续接收键盘式扫码器输入。
TextInputType.none 会请求 Flutter 不显示屏幕键盘,同时仍允许接收键盘输入。showCursor: false 会隐藏文本光标。你现在设置的 keyboardType: TextInputType.text 会请求普通文本键盘,因此页面获得焦点时,软键盘会弹出。
修改 TextField
在 HiddenTextField 中调整这些属性:
TextField(
controller: controller,
focusNode: focusNode,
autofocus: true,
keyboardType: TextInputType.none,
showCursor: false,
readOnly: false,
enableSuggestions: false,
autocorrect: false,
enableIMEPersonalizedLearning: false,
onSubmitted: onSubmitted,
)
现有的 barcodeFocus.requestFocus() 可以继续使用。扫码器通过键盘输入方式发送字符时,获得焦点的 TextField 仍会接收这些字符,控制器监听器和 onSubmitted 也能按原有逻辑处理输入。
注意事项
这种设置适用于扫码器作为外接键盘或键盘楔子发送按键的情况。如果设备通过专用插件或系统输入法服务传递扫码结果,具体行为可能取决于设备和插件。可以检查它是否依赖屏幕键盘对应的输入连接,或直接使用插件提供的扫码回调。
如果对话框或页面中的其他控件抢走了焦点,关闭后需要重新调用 barcodeFocus.requestFocus()。控件设为透明并不能阻止软键盘弹出,因此仍需设置上述输入类型和光标选项。
备注:内容仅供参考。
