Flutter中如何使用nfc_manager 4.0.0之后版本获取nfca属性
在Flutter项目中使用nfc_manager 4.0.0以上版本时,如何正确获取NFCA标签的属性数据?我按照官方文档尝试了NfcA类型的tag读取,但调用tag.data或tag.identifier时返回的数据格式与预期不符。能否提供一个完整的代码示例,展示从NFC设备检测到成功获取NFCA标签ID和ATQA/SAK等属性的完整流程?需要特别注意哪些API调用顺序或权限配置?
2 回复
在Flutter中使用nfc_manager 4.0.0+获取NFCA属性:
- 添加依赖:
nfc_manager: ^4.0.0 - 检查NFC支持:
NfcManager.instance.isAvailable() - 开始会话:
NfcManager.instance.startSession(
onDiscovered: (NfcTag tag) {
final nfca = tag.data['nfca'];
print('ATQA: ${nfca['atqa']}');
print('SAK: ${nfca['sak']}');
print('UID: ${nfca['identifier']}');
}
);
注意:需要添加NFC权限。
更多关于Flutter中如何使用nfc_manager 4.0.0之后版本获取nfca属性的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中使用nfc_manager 4.0.0+版本获取NFCA属性,可以通过以下步骤实现:
1. 添加依赖
在 pubspec.yaml 中添加:
dependencies:
nfc_manager: ^4.0.0
2. 请求NFC权限
在 AndroidManifest.xml 中添加:
<uses-permission android:name="android.permission.NFC" />
3. 核心代码实现
import 'package:nfc_manager/nfc_manager.dart';
class NfcHandler {
Future<void> startNfcReading() async {
bool isAvailable = await NfcManager.instance.isAvailable();
if (!isAvailable) {
print('NFC not available');
return;
}
NfcManager.instance.startSession(
onDiscovered: (NfcTag tag) async {
// 获取NFCA属性
NfcA? nfcA = NfcA.from(tag);
if (nfcA == null) {
print('Not an NFC-A tag');
NfcManager.instance.stopSession();
return;
}
try {
// 获取ATQA和SAK
Uint8List atqa = nfcA.atqa;
int sak = nfcA.sak;
int maxTransceiveLength = nfcA.maxTransceiveLength;
int timeout = nfcA.timeout;
print('ATQA: $atqa');
print('SAK: $sak');
print('Max Transceive Length: $maxTransceiveLength');
print('Timeout: $timeout');
// 可选:发送APDU指令
// Uint8List response = await nfcA.transceive(data);
} catch (e) {
print('Error: $e');
} finally {
NfcManager.instance.stopSession();
}
},
);
}
}
4. 使用示例
在StatefulWidget中调用:
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () => NfcHandler().startNfcReading(),
child: Text('Start NFC Reading'),
);
}
关键属性说明:
- atqa: Answer To Request A (2字节)
- sak: Select Acknowledge (1字节)
- maxTransceiveLength: 最大传输长度
- timeout: 超时时间
注意事项:
- 确保设备支持NFC
- 需要在AndroidManifest.xml中声明NFC权限
- 及时调用stopSession()释放资源
- 处理可能出现的异常
这样就能成功获取NFC-A标签的基本属性信息了。

