scan_gun 2.0.2+2 copy "scan_gun: ^2.0.2+2" to clipboard
scan_gun: ^2.0.2+2 copied to clipboard

flutter实现扫码枪获取数据,禁止系统键盘弹窗

flutter:实现扫码枪获取数据源,禁止系统键盘弹窗(不会触发键盘唤起,不会触发中文乱码) #

实现扫码枪获取数据源,禁止系统键盘弹窗。依赖 EditableText 原理,实现 flutter 端扫码能力支持。 (不会触发键盘唤起,不会触发中文乱码)

引入 #

在pubspec.yaml文件中进行引用:

dependencies:
  scan_gun: ^2.0.0

使用方式: #

在 main 方法中初始化 TextInputBinding

 void main() {
   TextInputBinding();
   runApp(const MyApp());
 }

提供 ScanMonitorWidget 作为父节点,嵌套使用:

  ScanMonitorWidget({
    Key? key,
    required ChildBuilder childBuilder,
    FocusNode? scanNode,
    FocusNode? textFiledNode,
    required void Function(String) onSubmit,
  })

参数说明:

  • childBuilder :

typedef ChildBuilder = Widget Function(BuildContext context),使用者自己UI作为子节点

  • scanNode:

非必传,如果传,可通过 scanNode 监听获取当前扫码可用状态,hasFocus 时为获取焦点

  • GlobalKey

非必传,如果传,可通过 'scanKey' 强制获取获取焦点,保证扫码可用,如下 scanKey.currentState?.requestKeyboard()

  • textFiledNode:

提供外部存在输入框键盘输入与扫码输入同时存在的场景。内部做了焦点切换能力,保证输入框焦点取消后,能马上切换成扫码枪的焦点

  • focusLooper:

非必传,传true可开启轮询保活扫码焦点,但需要保证当前页面堆栈只存在一个 ScanMonitorWidget

  • onSubmit:

接收扫码枪返回的结果

适用场景及Demo演示: #

1. 无输入框交互,获取扫码结果:

@override
  Widget build(BuildContext context) {
    return ScanMonitorWidget(
      childBuilder: (context) {
        return body();
      },
      onSubmit: (String result) {
        print(result); //接收到扫码结果
      },
    );
  }

2. 带输入框交互,获取扫码结果:

FocusNode textFiledNode = FocusNode();
TextEditingController controller = TextEditingController();

 Widget body() {
  return TextField(
     focusNode: textFiledNode,
     controller: controller,
   );
 }

@override
  Widget build(BuildContext context) {
    return ScanMonitorWidget(
      textFiledNode: textFiledNode,
      childBuilder: (context) {
        return body();
      },
      onSubmit: (String result) {
        print(result); //接收到扫码结果
      },
    );
  }

详细使用方式可查看 example : #

技术点分析

8
likes
125
pub points
81%
popularity

Publisher

unverified uploader

flutter实现扫码枪获取数据,禁止系统键盘弹窗

Repository (GitHub)
View/report issues

Documentation

API reference

License

BSD-3-Clause (license)

Dependencies

flutter, visibility_detector

More

Packages that depend on scan_gun