Flutter USB NFC读取插件usbnfcreader的使用

Flutter USB NFC读取插件usbnfcreader的使用

描述

usbnfcreader 是一个专门用于 Android 平台的 Flutter 插件,目前仅支持通过 ACR122U USB NFC 阅读器进行 NFC 数据读取。


使用方法

处理会话

检查可用性

首先,获取 Usbnfcreader 的实例并检查其可用性:

final usbnfcreader = await Usbnfcreader.instance;

启动会话

调用 startSession 方法以启动 NFC 扫描会话。在会话中可以监听到 NFC 标签被发现的事件,并对标签执行操作:

usbnfcreader.startSession(
  onDiscovered: (NfcTag tag) async {
    // 对 NFC 标签执行操作,例如打印标签信息
    print("NFC Tag Discovered:");
    print("Hex ID: ${tag.hexId}");
    print("ID: ${tag.id}");
  },
  onReaderAttached: () {
    // 当阅读器连接时触发
    print("Reader Attached");
  },
  onReaderDetached: () {
    // 当阅读器断开连接时触发
    print("Reader Detached");
  },
);

停止会话

完成 NFC 操作后,调用 stopSession 方法停止会话:

usbnfcreader.stopSession();

可用事件

该插件提供了以下事件供开发者使用:

  • onDiscovered: 当 NFC 标签被发现时触发。
  • onReaderAttached: 当 NFC 阅读器连接时触发。
  • onReaderDetached: 当 NFC 阅读器断开连接时触发。

完整示例代码

以下是一个完整的 Flutter 示例代码,展示如何使用 usbnfcreader 插件进行 NFC 数据读取:

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

import 'package:flutter/services.dart';
import 'package:usbnfcreader/usbnfcreader.dart';

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

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _usbnfcreaderPlugin = Usbnfcreader.instance;
  String _lastScannedTag = '尚未扫描到任何 NFC 标签'; // 存储最后扫描到的 NFC 标签信息

  [@override](/user/override)
  void initState() {
    super.initState();
    initPlatformState(); // 初始化平台状态
  }

  // 初始化平台状态
  Future<void> initPlatformState() async {
    try {
      // 启动 NFC 扫描会话
      _usbnfcreaderPlugin.startSession(
        onDiscovered: (tag) async {
          // 当 NFC 标签被发现时触发
          debugPrint("NFC Tag Discovered:");
          debugPrint("Hex ID: ${tag.hexId}");
          debugPrint("ID: ${tag.id}");

          // 更新 UI 中显示的 NFC 标签信息
          setState(() {
            _lastScannedTag = "Hex ID: ${tag.hexId}";
          });
        },
        onReaderAttached: () {
          // 当 NFC 阅读器连接时触发
          debugPrint("Reader Attached");
        },
        onReaderDetached: () {
          // 当 NFC 阅读器断开连接时触发
          debugPrint("Reader Detached");
        },
      );
    } on PlatformException {
      // 如果启动失败,记录错误日志
      debugPrint("Failed to start NFC Scanner.");
    }

    // 如果小部件从树中移除,则停止后续操作
    if (!mounted) return;
  }

  // 显示成功提示框
  void _onAlertSuccessButtonPressed() {
    _usbnfcreaderPlugin.alertSuccess();
  }

  // 显示错误提示框
  void _onAlertErrorButtonPressed() {
    _usbnfcreaderPlugin.alertError();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('NFC 扫描示例'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text(_lastScannedTag), // 显示最后扫描到的 NFC 标签信息
              const SizedBox(height: 20),
              ElevatedButton(
                onPressed: _onAlertSuccessButtonPressed,
                child: const Text('显示成功提示'),
              ),
              ElevatedButton(
                onPressed: _onAlertErrorButtonPressed,
                child: const Text('显示错误提示'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter USB NFC读取插件usbnfcreader的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter USB NFC读取插件usbnfcreader的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


要在Flutter中使用USB NFC读取插件 usbnfcreader,你需要按照以下步骤进行配置和使用。假设你已经有一个Flutter项目,并且已经安装了Flutter SDK。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  usbnfcreader: ^1.0.0  # 请使用最新版本

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

2. 配置Android项目

由于 usbnfcreader 插件可能涉及到USB和NFC硬件的访问,因此你需要在Android项目中配置相应的权限。

android/app/src/main/AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.USB_PERMISSION" />
<uses-feature android:name="android.hardware.usb.host" />

3. 初始化插件

在你的Flutter代码中,首先需要初始化 usbnfcreader 插件。

import 'package:usbnfcreader/usbnfcreader.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await UsbNfcReader.initialize();
  runApp(MyApp());
}

4. 使用插件读取NFC数据

你可以使用 UsbNfcReader 类提供的方法来读取NFC数据。以下是一个简单的示例:

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

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

class NFCReaderScreen extends StatefulWidget {
  @override
  _NFCReaderScreenState createState() => _NFCReaderScreenState();
}

class _NFCReaderScreenState extends State<NFCReaderScreen> {
  String _nfcData = "No data read yet";

  Future<void> _readNFC() async {
    try {
      String data = await UsbNfcReader.readNFC();
      setState(() {
        _nfcData = data;
      });
    } catch (e) {
      setState(() {
        _nfcData = "Failed to read NFC: $e";
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('USB NFC Reader'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(_nfcData),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _readNFC,
              child: Text('Read NFC'),
            ),
          ],
        ),
      ),
    );
  }
}

5. 处理USB权限

在某些情况下,你可能需要请求USB权限。你可以使用 UsbNfcReader.requestPermission() 方法来请求权限。

Future<void> _requestPermission() async {
  bool hasPermission = await UsbNfcReader.requestPermission();
  if (hasPermission) {
    print("USB permission granted");
  } else {
    print("USB permission denied");
  }
}
回到顶部