Flutter条码扫描插件zebra_barcode_reader_android的使用

发布于 1周前 作者 vueper 来自 Flutter

Flutter条码扫描插件zebra_barcode_reader_android的使用

zebra_barcode_reader_androidzebra_barcode_reader 插件的 Android 实现。

使用

此插件被官方推荐使用,因此你可以直接使用 zebra_barcode_reader。当你这样使用时,该插件会自动包含在你的应用中,所以你不需要将其添加到你的 pubspec.yaml 文件中。

然而,如果你导入此包以使用其任何 API,则应像往常一样将其添加到你的 pubspec.yaml 文件中。

使用内置命令

以下是如何使用 pigeon 代码生成命令的一个例子:

dart run pigeon --input ./pigeons/messages.dart

以下是使用 build_runner 构建命令的一个例子:

dart run build_runner build

完整示例代码

下面是一个完整的示例代码,展示了如何在 Flutter 应用中使用 zebra_barcode_reader_android 插件进行条码扫描。

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:zebra_barcode_reader_android/zebra_barcode_reader_android.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 _platform = ZebraBarcodeReaderAndroid();
  Set<String> _tags = {};
  bool _connected = false;
  late StreamSubscription<dynamic> _tagSubscription;
  late StreamSubscription<dynamic> _statusSubscription;

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

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

  // 平台消息是异步的,所以我们初始化在一个异步方法中。
  Future<void> initPlatformState() async {
    _tagSubscription = _platform.onBarcodeReadEvent().listen((event) {
      setState(() {
        _tags.add(event.barcode.data);
      });
    });
    _statusSubscription = _platform.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: _tags.length,
            itemBuilder: (context, index) {
              return ListTile(
                title: Text(_tags.toList()[index]),
              );
            },
          ),
        ),
        Align(
          alignment: Alignment.bottomCenter,
          child: OutlinedButton(
            onPressed: () async {
              if (_connected) {
                await _platform.disconnect();
                setState(() {
                  _tags = {};
                });
              } else {
                await _platform.connect();
                setState(() {
                  _tags = {};
                });
              }
            },
            child: _connected ? const Text('断开连接') : const Text('连接'),
          ),
        ),
      ],
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用zebra_barcode_reader_android插件来实现条码扫描的示例代码。这个插件专门用于在Android设备上使用Zebra条码扫描器进行条码扫描。

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

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

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

接下来,你需要进行一些Android特定的配置。在你的android/app/src/main/AndroidManifest.xml文件中,确保你有必要的权限和配置:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yourapp">

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />

    <application
        ...>
        <activity ...>
            ...
            <intent-filter>
                <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
            </intent-filter>
            <meta-data
                android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
                android:resource="@xml/device_filter" />
        </activity>
    </application>
</manifest>

同时,你需要在android/app/src/main/res/xml/目录下创建一个名为device_filter.xml的文件,用于指定USB设备过滤器:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <usb-device vendor-id="0x1234" product-id="0x5678" />  <!-- 替换为你的Zebra扫描器的Vendor ID和Product ID -->
</resources>

现在,你可以在你的Flutter代码中实现条码扫描功能。以下是一个简单的示例:

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

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  String scannedData = "";

  void startBarcodeScan() async {
    try {
      String result = await ZebraBarcodeReaderAndroid.scanBarcode();
      setState(() {
        scannedData = result;
      });
    } catch (e) {
      print("Error scanning barcode: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Barcode Scanner'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Scanned Data:',
              style: TextStyle(fontSize: 20),
            ),
            Text(
              scannedData,
              style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: startBarcodeScan,
              child: Text('Scan Barcode'),
            ),
          ],
        ),
      ),
    );
  }
}

在上面的代码中,我们创建了一个简单的Flutter应用,其中包含一个按钮,用于启动条码扫描。扫描结果将显示在页面上。

请注意,ZebraBarcodeReaderAndroid.scanBarcode()方法是一个异步函数,它会启动条码扫描并返回扫描结果。如果扫描过程中发生错误,它将捕获并打印错误消息。

确保你已经连接了Zebra条码扫描器,并且已经正确配置了USB设备过滤器。如果一切正常,你应该能够通过点击按钮来启动条码扫描并获取扫描结果。

回到顶部