You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Flutter实现RFID读写及NFC阅读器应用开发?

Flutter实现RFID读写与NFC阅读器指南

一、RFID读写功能实现

RFID分为HF(高频)、UHF(超高频)等不同频段,Flutter本身无原生API支持,需借助第三方插件或原生桥接实现。

1. 插件选择

针对常用的UHF设备,可使用flutter_uhf_rfid这类专注UHF读写的插件;通用场景可选rfid_reader。在pubspec.yaml中添加依赖后执行flutter pub get完成安装。

2. 核心实现步骤

  • 初始化设备:调用插件初始化方法完成阅读器准备
    await UhfRfid.init();
    
  • 连接设备:若为蓝牙外接阅读器,先完成系统蓝牙配对,再通过插件连接
    await UhfRfid.connect('蓝牙设备MAC地址');
    
  • 读取标签:启动读取监听或主动触发读取,获取标签数据
    UhfRfid.startReading().listen((tagList) {
      for (var tag in tagList) {
        print('标签ID: ${tag.id}, 数据: ${tag.data}');
      }
    });
    
  • 写入标签:指定目标标签ID和待写入数据,调用写入方法
    bool success = await UhfRfid.writeData('目标标签ID', '要写入的内容');
    print(success ? '写入成功' : '写入失败');
    

3. 注意事项

  • 不同品牌RFID阅读器的指令集存在差异,需对照设备官方文档调整参数
  • Android需申请BLUETOOTH、BLUETOOTH_ADMIN等权限;iOS需配置蓝牙相关权限
  • 优先使用真实设备测试,模拟器不支持硬件交互

二、NFC阅读器应用开发

Flutter完全可以开发NFC阅读器,借助成熟插件即可快速实现跨平台支持。

1. 核心插件选择

nfc_manager是目前最主流的跨平台NFC插件,支持Android/iOS的NDEF标签读写,功能覆盖大部分场景。

2. 权限配置

  • Android:在AndroidManifest.xml中添加权限与配置
    <uses-permission android:name="android.permission.NFC" />
    <!-- Android 10+ 需添加 -->
    <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES" />
    
    <activity android:name=".MainActivity" android:launchMode="singleTop">
      <intent-filter>
        <action android:name="android.nfc.action.NDEF_DISCOVERED" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
      </intent-filter>
    </activity>
    
  • iOS:在Info.plist中添加权限说明,并开启XCode项目的NFC capability
    <key>NFCReaderUsageDescription</key>
    <string>读取NFC标签信息,用于身份验证或数据交互</string>
    

3. 代码实现

  • 检查NFC可用性:先判断设备是否支持NFC功能
    bool isNfcAvailable = await NfcManager.instance.isAvailable();
    if (!isNfcAvailable) {
      print('设备不支持NFC');
      return;
    }
    
  • 启动NFC会话读写标签:
    await NfcManager.instance.startSession(
      onDiscovered: (NfcTag tag) async {
        // 解析NDEF标签
        Ndef? ndefTag = Ndef.from(tag);
        if (ndefTag != null) {
          // 读取标签内容
          if (!ndefTag.isWritable) {
            print('标签不可写入');
          }
          NdefMessage message = await ndefTag.read();
          String content = utf8.decode(message.records.first.payload.sublist(3));
          print('读取到的内容: $content');
    
          // 写入标签内容(可选)
          bool writeSuccess = await ndefTag.write(NdefMessage([
            NdefRecord.createText('Flutter NFC 测试内容'),
          ]));
          print(writeSuccess ? '写入成功' : '写入失败');
        }
        // 结束会话
        NfcManager.instance.stopSession();
      },
      onError: (error) {
        print('NFC会话错误: $error');
        NfcManager.instance.stopSession();
      },
    );
    

4. 注意事项

  • iOS仅支持NDEF格式标签,Android支持更多非NDEF标签类型
  • 需处理会话启停逻辑,避免后台残留资源
  • 动态申请权限(Android 6+),确保用户授权后再使用NFC功能

通用建议

  • 若现有插件无法满足定制化需求,可通过Flutter Method Channel 桥接Android/iOS原生代码,实现自定义RFID/NFC交互逻辑
  • 测试时使用真实标签与设备,模拟器无法模拟硬件NFC/RFID交互

内容的提问来源于stack exchange,提问作者abishek perera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 13:06:12