PAYATHON 2026

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()。控件设为透明并不能阻止软键盘弹出,因此仍需设置上述输入类型和光标选项。

备注:内容仅供参考。