scan_gun 1.0.5 copy "scan_gun: ^1.0.5" to clipboard
scan_gun: ^1.0.5 copied to clipboard

outdated

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

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

实现扫码枪获取数据源,禁止系统键盘弹窗。依赖 EditableText 原理,实现 flutter 端扫码能力支持。

引入 #

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

dependencies:
  scan_gun: ^1.0.0

使用方式: #

提供 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:
  1. 非必传,如果传,可通过 scanNode 监听获取当前扫码可用状态,hasFocus 时为可用
  2. 也可通过 scanNode requestFocus 方法,强制扫码获取焦点,保证扫码能力;
  • textFiledNode:

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

  • 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 : #

技术点分析

7
likes
75
pub points
77%
popularity

Publisher

unverified uploader

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

Repository (GitHub)
View/report issues

Documentation

API reference

License

BSD-3-Clause (LICENSE)

Dependencies

flutter

More

Packages that depend on scan_gun