如何使用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
相关产品推荐
相关产品推荐

