Flutter NFC读写操作插件nfc_read_write_plugin的使用
Flutter NFC读写操作插件nfc_read_write_plugin的使用
获取开始
在使用 nfc_read_write_plugin
插件之前,确保你已经在你的 Flutter 项目中添加了该依赖。在 pubspec.yaml
文件中添加以下依赖:
dependencies:
nfc_read_write_plugin: ^版本号
然后运行 flutter pub get
来获取依赖。
设置
Android 设置
-
权限配置
在AndroidManifest.xml
文件中添加 NFC 权限:<uses-permission android:name="android.permission.NFC" />
-
修改 MainActivity.java
修改MainActivity.java
文件以支持 NFC 功能:import android.app.PendingIntent; import android.content.Intent; import android.content.IntentFilter; import android.nfc.NfcAdapter; import android.nfc.tech.NfcA; import android.nfc.tech.NfcV; import io.flutter.embedding.android.FlutterActivity; public class MainActivity extends FlutterActivity { protected String[][] techList; protected IntentFilter[] intentFilters; protected PendingIntent pendingIntent; @Override protected void onResume() { super.onResume(); techList = new String[][] { new String[] { NfcV.class.getName() }, new String[] { NfcA.class.getName() } }; intentFilters = new IntentFilter[] { new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED), }; // 创建一个 PendingIntent 对象, 这样Android系统就能在一个tag被检测到时定位到这个对象 pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); NfcAdapter.getDefaultAdapter(this).enableForegroundDispatch(this, pendingIntent, intentFilters, techList); } @Override protected void onPause() { super.onPause(); NfcAdapter.getDefaultAdapter(this).disableForegroundDispatch(this); } }
示例代码
以下是一个完整的示例代码,展示了如何使用 nfc_read_write_plugin
插件进行 NFC 读写操作。
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:nfc_read_write_plugin/nfc_read_write_plugin.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _platformVersion = 'Unknown';
dynamic result;
[@override](/user/override)
void initState() {
super.initState();
initPlatformState();
initEvent();
}
initEvent() async {
await NfcReadWritePlugin.eventListen(onEvent: (message) {
setState(() {
result = message;
});
});
}
// 平台消息是异步的,因此我们在异步方法中初始化。
Future<void> initPlatformState() async {
String platformVersion;
// 平台消息可能失败,所以我们使用try/catch来处理PlatformException。
try {
platformVersion = await NfcReadWritePlugin.platformVersion;
} on PlatformException {
platformVersion = 'Failed to get platform version.';
}
// 如果在异步平台消息飞行期间小部件从树中删除,我们希望丢弃回复而不是调用setState来更新我们的非存在外观。
if (!mounted) return;
setState(() {
_platformVersion = platformVersion;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: SingleChildScrollView(
child: Column(
children: [
Text('Running on: $_platformVersion\n'),
Text('事件监听:${result?.toString()}'),
ElevatedButton(
onPressed: () async {
var data = await NfcReadWritePlugin.initService(
"42374D4C3546", "B10A23D18F20");
debugPrint("dart...$data");
},
child: const Text("initService"),
),
ElevatedButton(
onPressed: () async {
var data = await NfcReadWritePlugin.readAll(decrypt: true);
debugPrint("dart...$data");
},
child: const Text("readAll decrypt: true"),
),
ElevatedButton(
onPressed: () async {
var data = await NfcReadWritePlugin.readAll();
debugPrint("dart...$data");
},
child: const Text("readAll"),
),
ElevatedButton(
onPressed: () async {
var data = await NfcReadWritePlugin.writeBlock(40, "你好测试一下");
debugPrint("dart...$data");
},
child: const Text("writeBlock"),
),
ElevatedButton(
onPressed: () async {
var data = await NfcReadWritePlugin.readSector(10);
debugPrint("dart...$data");
},
child: const Text("readSector"),
),
ElevatedButton(
onPressed: () async {
var data =
await NfcReadWritePlugin.readSector(10, decrypt: true);
debugPrint("dart...$data");
},
child: const Text("readSector decrypt: true"),
),
ElevatedButton(
onPressed: () async {
var data = await NfcReadWritePlugin.writeBlock(40, "你好测试一下",
encrypt: true);
debugPrint("dart...$data");
},
child: const Text("writeBlock encrypt: true"),
),
ElevatedButton(
onPressed: () async {
var data =
await NfcReadWritePlugin.readBlock(40, decrypt: true);
debugPrint("dart...$data");
},
child: const Text("readBlock decrypt: true"),
),
ElevatedButton(
onPressed: () async {
var data = await NfcReadWritePlugin.readBlock(
40,
);
debugPrint("dart...$data");
},
child: const Text("readBlock "),
)
],
),
),
),
);
}
}
更多关于Flutter NFC读写操作插件nfc_read_write_plugin的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter NFC读写操作插件nfc_read_write_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter应用中使用nfc_read_write_plugin
插件进行NFC读写操作的代码案例。这个插件允许你与NFC标签进行交互,读取和写入数据。
首先,确保你已经在pubspec.yaml
文件中添加了nfc_read_write_plugin
依赖:
dependencies:
flutter:
sdk: flutter
nfc_read_write_plugin: ^最新版本号 # 请替换为最新版本号
然后,运行flutter pub get
来获取依赖。
接下来,你需要在Android的AndroidManifest.xml
文件中添加NFC权限:
<uses-permission android:name="android.permission.NFC" />
<uses-feature android:name="android.hardware.nfc" android:required="true" />
此外,还需要在MainActivity.kt
(或MainActivity.java
)中启用NFC适配器:
// MainActivity.kt
import android.content.Intent
import android.content.IntentFilter
import android.nfc.NfcAdapter
import androidx.annotation.NonNull
import io.flutter.embedding.android.FlutterActivity
class MainActivity: FlutterActivity() {
private var nfcAdapter: NfcAdapter? = null
override fun onResume() {
super.onResume()
nfcAdapter = NfcAdapter.getDefaultAdapter(this)
if (nfcAdapter != null) {
nfcAdapter!!.enableForegroundDispatch(this, null, intentFiltersArray, null)
}
}
override fun onPause() {
super.onPause()
if (nfcAdapter != null) {
nfcAdapter!!.disableForegroundDispatch(this)
}
}
companion object {
// Intent filters array for NFC dispatch
private val intentFiltersArray: Array<IntentFilter> by lazy {
arrayOf(IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED))
}
}
}
现在,你可以在Flutter代码中使用nfc_read_write_plugin
插件。以下是一个基本的示例,展示了如何读取和写入NFC标签:
import 'package:flutter/material.dart';
import 'package:nfc_read_write_plugin/nfc_read_write_plugin.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
NfcReadWritePlugin? _nfcReadWritePlugin;
String _nfcData = "";
@override
void initState() {
super.initState();
_nfcReadWritePlugin = NfcReadWritePlugin();
_nfcReadWritePlugin!.initNfc().then((_) {
// Start NFC session
_startNfcSession();
});
}
@override
void dispose() {
_nfcReadWritePlugin!.dispose();
super.dispose();
}
Future<void> _startNfcSession() async {
_nfcReadWritePlugin!.startNfcSession().then((_) {
// Listen for NFC tag discovered events
_nfcReadWritePlugin!.onNfcTagDiscovered!.listen((NfcTag tag) {
// Read data from NFC tag
_nfcReadWritePlugin!.readNfcTag(tag.id).then((data) {
setState(() {
_nfcData = String.fromCharCodes(data!);
});
}).catchError((error) {
print("Error reading NFC tag: $error");
});
// Optionally, write data to NFC tag
List<int> dataToWrite = Uint8List.fromList('Hello NFC!'.codeUnits);
_nfcReadWritePlugin!.writeNfcTag(tag.id, dataToWrite).then((_) {
print("Data written to NFC tag");
}).catchError((error) {
print("Error writing to NFC tag: $error");
});
});
}).catchError((error) {
print("Error starting NFC session: $error");
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('NFC Read/Write Example'),
),
body: Center(
child: Text('NFC Data: $_nfcData'),
),
),
);
}
}
这个示例展示了如何初始化NFC插件,启动NFC会话,监听NFC标签发现事件,读取和写入NFC标签的数据。请确保在实际项目中处理异常和权限请求,以提供更好的用户体验。