Flutter综合条码扫描与USB键盘输入插件combined_barcode_scanner_usb_keyboard的使用

Flutter综合条码扫描与USB键盘输入插件combined_barcode_scanner_usb_keyboard的使用

快速条码扫描器结合实现

这个实现(参见https://pub.dev/packages/combined_barcode_scanner) 利用键盘输入来检测扫描码。 一些外部USB扫描仪被已知使用键盘输入来输入扫描码。(例如:Zebra DS2208)

请遵循以下安装指南:

示例

BarcodeScannerWidget(
  controller: _controller,
  onScan: (code) {
    if (kDebugMode) {
      print("GOT BARCODE =========== ${code.code}");
    }
  },
  configuration: const ScannerConfiguration(
    enableFormats: {}, // 支持的格式由扫描仪本身确定
  ),
  scanners: [UsbKeyboardScanner()],
);

示例代码

以下是完整的示例代码:

import 'package:combined_barcode_scanner/combined_barcode_scanner.dart';
import 'package:combined_barcode_scanner_usb_keyboard/combined_barcode_scanner_usb_keyboard.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  // 这个小部件是你的应用的根节点
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late final BarcodeScannerWidgetController _controller;

  [@override](/user/override)
  void initState() {
    super.initState();
    _controller = BarcodeScannerWidgetController(() {});
  }

  [@override](/user/override)
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: BarcodeScannerWidget(
        controller: _controller,
        onScan: (code) {
          if (kDebugMode) {
            print("GOT BARCODE =========== ${code.code}");
          }
        },
        configuration: const ScannerConfiguration(
          // enableFormats 在使用UsbKeyboardScanner时不起作用,此配置由设备本身管理
          enableFormats: {},
        ),
        scanners: [UsbKeyboardScanner()],
      ),
    );
  }
}

更多关于Flutter综合条码扫描与USB键盘输入插件combined_barcode_scanner_usb_keyboard的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter综合条码扫描与USB键盘输入插件combined_barcode_scanner_usb_keyboard的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何使用 combined_barcode_scanner_usb_keyboard 插件的示例代码。这个插件假设集成了条码扫描和USB键盘输入的功能。由于这是一个假设的插件名称,具体的API和方法可能会根据实际的插件有所不同。以下代码提供了一个基本的结构和思路,你可以根据实际的插件文档进行调整。

首先,确保在你的 pubspec.yaml 文件中添加该插件(假设插件名称和版本已知):

dependencies:
  flutter:
    sdk: flutter
  combined_barcode_scanner_usb_keyboard: ^x.y.z  # 替换为实际版本号

然后,运行 flutter pub get 来获取依赖。

接下来,在你的 Flutter 应用中实现该插件的功能。以下是一个基本的示例:

import 'package:flutter/material.dart';
import 'package:combined_barcode_scanner_usb_keyboard/combined_barcode_scanner_usb_keyboard.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Combined Barcode Scanner and USB Keyboard Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String scanResult = '';
  String usbKeyboardInput = '';

  @override
  void initState() {
    super.initState();
    // 初始化条码扫描和USB键盘监听
    _initCombinedScannerAndKeyboard();
  }

  void _initCombinedScannerAndKeyboard() {
    CombinedBarcodeScannerUsbKeyboard.instance.scanBarcode().listen((result) {
      setState(() {
        scanResult = result;
      });
    });

    CombinedBarcodeScannerUsbKeyboard.instance.listenUsbKeyboardInput().listen((input) {
      setState(() {
        usbKeyboardInput += input;
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Combined Barcode Scanner and USB Keyboard Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Text('Barcode Scan Result:', style: TextStyle(fontSize: 18)),
            SizedBox(height: 8),
            Text(scanResult, style: TextStyle(fontSize: 16)),
            SizedBox(height: 24),
            Text('USB Keyboard Input:', style: TextStyle(fontSize: 18)),
            SizedBox(height: 8),
            Text(usbKeyboardInput, style: TextStyle(fontSize: 16)),
          ],
        ),
      ),
    );
  }

  @override
  void dispose() {
    // 取消监听,避免内存泄漏
    CombinedBarcodeScannerUsbKeyboard.instance.scanBarcode().cancel();
    CombinedBarcodeScannerUsbKeyboard.instance.listenUsbKeyboardInput().cancel();
    super.dispose();
  }
}

在这个示例中,我们假设 CombinedBarcodeScannerUsbKeyboard 插件提供了两个主要方法:

  • scanBarcode():返回一个 Stream,用于监听条码扫描的结果。
  • listenUsbKeyboardInput():返回一个 Stream,用于监听USB键盘的输入。

请注意,实际的插件可能会有不同的API设计。因此,你需要参考插件的官方文档来获取准确的API和方法调用方式。

如果插件不存在,你可能需要寻找现有的条码扫描插件和USB键盘输入插件,并手动组合它们的功能。Flutter社区中有许多现成的插件可以满足这些需求,例如 barcode_scanusb_keyboard(如果这样的插件存在)。

回到顶部