Flutter条形码扫描插件zebra_barcode_reader的使用

Flutter条形码扫描插件zebra_barcode_reader的使用

Zebra Barcode Reader 插件

Unified Zebra Barcode 库用于Android设备,添加了一整套API来轻松创建强大的条形码手持设备和固定设备应用程序。Android条形码SDK包括类库、示例应用和源代码,以帮助开发者轻松构建充分利用Zebra设备功能的应用程序。

该插件封装了平台特定的持久存储,以便于数据管理(在iOS和macOS上为NSUserDefaults,在Android上为SharedPreferences等)。数据可以异步写入磁盘,但不能保证写操作会在返回后立即持久化到磁盘,因此此插件不应用于存储关键数据。

Android
支持 SDK 23+

支持的设备

手持读取器
  • RFD40XX
  • RFD90XX
  • MC33XXR
  • RFD8500
固定读取器
  • FX7500
  • FX9600

使用方法

示例代码

以下是一个简单的示例,展示了如何使用该API。

条形码读取器连接
// 获取共享偏好设置。
final ZebraBarcodeReader reader = await ZebraBarcodeReader.getInstance();

// 连接到设备
await reader.connect();
// 断开与设备的连接
await reader.disconnect();
完整示例
import 'dart:async';

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

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: const MyPage(),
      ),
    );
  }
}

class MyPage extends StatefulWidget {
  const MyPage({super.key});

  [@override](/user/override)
  State<MyPage> createState() => _MyPageState();
}

class _MyPageState extends State<MyPage> {
  final _reader = ZebraBarcodeReader();

  Set<String> _barcodes = {};
  bool _connected = false;
  late StreamSubscription<dynamic> _barcodeSubscription;
  late StreamSubscription<dynamic> _statusSubscription;

  [@override](/user/override)
  void initState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((_) {
      initPlatformState();
    });
  }

  [@override](/user/override)
  void dispose() {
    _barcodeSubscription.cancel();
    _statusSubscription.cancel();
    super.dispose();
  }

  // 平台消息是异步的,所以我们初始化时使用异步方法。
  Future<void> initPlatformState() async {
    await _reader.init(BarcodeReaderInitParameters(autoConnect: true));
    _barcodeSubscription = _reader.onBarcodeReadEvent().listen((event) {
      setState(() {
        _barcodes.add(event.barcode.data);
      });
    });
    _statusSubscription = _reader.onScannerStatusEvent().listen((event) {
      setState(() {
        _connected = event.status.isConnected;
      });
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Stack(
      children: [
        Padding(
          padding: const EdgeInsets.only(bottom: 60.0),
          child: ListView.builder(
            itemCount: _barcodes.length,
            itemBuilder: (context, index) {
              return ListTile(
                title: Text(_barcodes.toList()[index]),
              );
            },
          ),
        ),
        Align(
          alignment: Alignment.bottomCenter,
          child: OutlinedButton(
            onPressed: () async {
              if (_connected) {
                await _reader.disconnect();
                setState(() {
                  _barcodes = {};
                });
              } else {
                await _reader.connect();
                setState(() {
                  _barcodes = {};
                });
              }
            },
            child: _connected ? const Text('断开连接') : const Text('连接'),
          ),
        ),
      ],
    );
  }
}

更多关于Flutter条形码扫描插件zebra_barcode_reader的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter条形码扫描插件zebra_barcode_reader的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用zebra_barcode_reader插件的一个示例代码案例。这个插件主要用于从Zebra条形码扫描器读取数据。

首先,你需要在你的pubspec.yaml文件中添加zebra_barcode_reader依赖:

dependencies:
  flutter:
    sdk: flutter
  zebra_barcode_reader: ^最新版本号  # 请替换为实际最新版本号

然后运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中,你可以使用以下代码来集成和使用这个插件:

  1. 导入插件
import 'package:zebra_barcode_reader/zebra_barcode_reader.dart';
  1. 请求权限并初始化扫描器

由于访问条形码扫描器可能涉及权限问题,你需要在Android的AndroidManifest.xml中添加必要的权限(如果插件文档中有提到的话)。然后,在你的Flutter代码中,你可以初始化扫描器并开始扫描。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ScannerPage(),
    );
  }
}

class ScannerPage extends StatefulWidget {
  @override
  _ScannerPageState createState() => _ScannerPageState();
}

class _ScannerPageState extends State<ScannerPage> {
  ZebraBarcodeReader? _zebraBarcodeReader;

  @override
  void initState() {
    super.initState();
    _zebraBarcodeReader = ZebraBarcodeReader();
    _initScanner();
  }

  @override
  void dispose() {
    _zebraBarcodeReader?.dispose();
    super.dispose();
  }

  Future<void> _initScanner() async {
    try {
      // 初始化扫描器,这里假设插件提供了init方法,具体方法名请参考插件文档
      await _zebraBarcodeReader!.init();
      
      // 开始扫描
      _zebraBarcodeReader!.startScan().listen((String barcodeData) {
        // 处理扫描到的条形码数据
        print("Scanned Barcode: $barcodeData");
        // 这里可以更新UI或者执行其他操作
        setState(() {
          // 例如,更新一个Text widget显示扫描结果
        });
      }, onError: (error) {
        // 处理错误
        print("Error scanning barcode: $error");
      }, onDone: () {
        // 扫描完成时的回调
        print("Scanning done.");
      });
    } catch (e) {
      print("Failed to initialize scanner: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Barcode Scanner Demo'),
      ),
      body: Center(
        child: Text(
          'Waiting for barcode scan...',
          style: TextStyle(fontSize: 24),
        ),
      ),
    );
  }
}

注意

  1. 插件的具体API(如初始化方法、开始扫描方法等)可能有所不同,因此请参考插件的官方文档来调整代码。
  2. 如果插件要求处理权限请求(例如CAMERA权限),你需要在Flutter中处理这些权限请求。
  3. 由于zebra_barcode_reader是一个特定于Zebra设备的插件,因此它可能只在Zebra设备上有效。在非Zebra设备上测试时,可能无法正常工作。

这个示例提供了一个基本的框架,展示了如何集成和使用zebra_barcode_reader插件。根据你的具体需求,你可能需要调整代码来适应你的应用程序。

回到顶部