Flutter NFC读取插件flutter_nfc_reader的使用
Flutter NFC读取插件flutter_nfc_reader的使用

一个帮助开发者使用iOS或Android设备内部硬件来读取和写入NFC标签的新Flutter插件。
系统会激活一个轮询读取会话,一旦识别到标签,该会话将自动停止。
您也可以通过专用函数手动触发停止事件。
支持的NFC格式
平台 | 支持的NFC标签 |
---|---|
Android | NDEF: A, B, F, V, BARCODE |
iOS | NDEF: NFC TYPE 1, 2, 3, 4, 5 |
仅Android支持NFC标签写入
安装
在pubspec.yaml
中添加依赖:
dependencies:
flutter_nfc_reader:
git:
url: git://github.com/matteocrippa/flutter-nfc-reader.git
ref: master
然后运行以下命令:
flutter packages get
最后在项目中导入:
import 'package:flutter_nfc_reader/flutter_nfc_reader.dart';
如何使用
Android设置
在AndroidManifest.xml
顶部添加以下两行:
<uses-permission android:name="android.permission.NFC" />
<uses-feature
android:name="android.hardware.nfc"
android:required="true" />
在build.gradle (Module: app)
中将minSdkVersion
设置为18:
defaultConfig {
...
minSdkVersion 18
...
}
iOS设置
目前仅支持基于Swift的Flutter项目。
- 启用功能/近场通信标签读取。
- 在
Info.plist
文件中,添加隐私 - NFC扫描使用描述,并设置字符串值为"NFC Tag"。
在Podfile
顶部添加以下代码:
platform :ios, '8.0'
use_frameworks!
读取NFC
此函数将在读取发生时返回一个Promise,在此之前读取会话保持打开状态。
Promise将返回一个NfcData
模型,该模型包含以下内容:
id
: 标签的IDcontent
: 标签的内容error
: 如果发生任何错误
示例代码:
FlutterNfcReader.read().then((response) {
print(response.content);
});
流式读取NFC
此函数将返回一个流,每次识别到标签时都会发出NfcData
。
在iOS上也可以使用此方法,但iOS会在想要扫描NFC标签时始终显示底部弹窗。因此,当期望第二个值时,需要显式地将FlutterNfcReader.read()
转换为流。订阅流时,read
函数会自动调用一次。查看示例实现。
示例代码:
FlutterNfcReader.onTagDiscovered().listen((onData) {
print(onData.id);
print(onData.content);
});
写入NFC(仅限Android)
此函数将在写入发生时返回一个Promise,在此之前读取会话保持打开状态。
Promise将返回一个NfcData
模型,该模型包含以下内容:
content
: 写入到标签的内容
示例代码:
FlutterNfcReader.write(" ", "tag content").then((response) {
print(response.content);
});
读取与写入NFC(仅限Android)
您可以使用上述函数读取并随后写入NFC标签,如下所示:
FlutterNfcReader.read().then((readResponse) {
FlutterNfcReader.write(" ", readResponse.content).then((writeResponse) {
print('writed: ${writeResponse.content}');
});
});
停止NFC
status
: NFC读取或写入停止的状态
示例代码:
FlutterNfcReader.stop().then((response) {
print(response.status.toString());
});
有关更多详细信息,请查看演示应用程序。
iOS特定注意事项
在NFC扫描和写入方面,iOS的行为略有不同。
- 当前实现中无法获取标签的ID。
- 每次扫描对用户都是可见的,且会有底部弹窗提示。
开始使用
对于如何开始使用Flutter,请参阅我们的在线文档: Flutter官方文档
对于如何编辑插件代码,请参阅文档: Flutter插件开发指南
贡献
请先快速浏览贡献指南: 贡献指南
感谢所有贡献者! 贡献者列表
要开发iOS项目,由于以下问题,您需要激活“遗留”构建系统: Flutter Issue #20685
示例代码
以下是完整的示例代码:
import 'package:flutter/material.dart';
import 'package:flutter_nfc_reader/flutter_nfc_reader.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Material App',
home: Scaffold(
appBar: AppBar(
title: Text('Material App Bar'),
),
body: Center(child: NfcScan()),
),
);
}
}
class NfcScan extends StatefulWidget {
NfcScan({Key key}) : super(key: key);
[@override](/user/override)
_NfcScanState createState() => _NfcScanState();
}
class _NfcScanState extends State<NfcScan> {
TextEditingController writerController = TextEditingController();
[@override](/user/override)
initState() {
super.initState();
writerController.text = 'Flutter NFC Scan';
FlutterNfcReader.onTagDiscovered().listen((onData) {
print(onData.id);
print(onData.content);
});
}
[@override](/user/override)
void dispose() {
// 清理控制器
writerController.dispose();
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Column(
children: <Widget>[
TextField(
controller: writerController,
),
RaisedButton(
onPressed: () {
FlutterNfcReader.read();
},
child: Text("Read"),
),
RaisedButton(
onPressed: () {
FlutterNfcReader.write(" ", writerController.text).then((value) {
print(value.content);
});
},
child: Text("Write"),
)
],
);
}
}
更多关于Flutter NFC读取插件flutter_nfc_reader的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter NFC读取插件flutter_nfc_reader的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_nfc_reader
是一个用于在 Flutter 应用中读取 NFC 标签的插件。它允许你与 NFC 标签进行交互,并读取标签中的数据。以下是如何使用 flutter_nfc_reader
插件的基本步骤。
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 flutter_nfc_reader
插件的依赖:
dependencies:
flutter:
sdk: flutter
flutter_nfc_reader: ^1.0.0
然后运行 flutter pub get
来安装依赖。
2. 导入插件
在你的 Dart 文件中导入 flutter_nfc_reader
插件:
import 'package:flutter_nfc_reader/flutter_nfc_reader.dart';
3. 初始化 NFC 读取器
在开始读取 NFC 标签之前,你需要初始化 NFC 读取器。通常,你可以在 initState
方法中进行初始化:
[@override](/user/override)
void initState() {
super.initState();
FlutterNfcReader.onTagDiscovered().listen((NfcTag tag) {
// 处理读取到的 NFC 标签数据
print("NFC Tag ID: ${tag.id}");
print("NFC Tag Content: ${tag.content}");
});
}
4. 开始读取 NFC 标签
你可以使用 FlutterNfcReader.start
方法来开始读取 NFC 标签:
void startNfcReading() async {
await FlutterNfcReader.start();
}
5. 停止读取 NFC 标签
读取完成后,你可以使用 FlutterNfcReader.stop
方法来停止读取:
void stopNfcReading() async {
await FlutterNfcReader.stop();
}
6. 处理读取到的 NFC 标签数据
在 FlutterNfcReader.onTagDiscovered
的监听器中,你可以处理读取到的 NFC 标签数据。例如,你可以将标签的 ID 和内容显示在 UI 上:
String nfcTagId = '';
String nfcTagContent = '';
[@override](/user/override)
void initState() {
super.initState();
FlutterNfcReader.onTagDiscovered().listen((NfcTag tag) {
setState(() {
nfcTagId = tag.id;
nfcTagContent = tag.content;
});
});
}
7. 在 UI 中显示 NFC 标签数据
你可以在 UI 中使用 Text
或其他小部件来显示读取到的 NFC 标签数据:
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('NFC Reader'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('NFC Tag ID: $nfcTagId'),
Text('NFC Tag Content: $nfcTagContent'),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: startNfcReading,
tooltip: 'Start NFC Reading',
child: Icon(Icons.nfc),
),
);
}
8. 处理权限
在 Android 上,你需要确保应用具有 NFC 权限。你可以在 AndroidManifest.xml
文件中添加以下权限:
<uses-permission android:name="android.permission.NFC" />
9. 处理错误
在实际使用中,你可能会遇到一些错误,例如设备不支持 NFC 或用户未启用 NFC。你可以使用 try-catch
块来捕获并处理这些错误:
void startNfcReading() async {
try {
await FlutterNfcReader.start();
} catch (e) {
print("Error starting NFC reading: $e");
}
}
10. 清理资源
在 dispose
方法中,你可以停止 NFC 读取并清理资源:
[@override](/user/override)
void dispose() {
FlutterNfcReader.stop();
super.dispose();
}