flutter_nfc_kit 1.2.0 flutter_nfc_kit: ^1.2.0 copied to clipboard
Plugin to provide NFC functionality on Android and iOS, including reading metadata and transceive layer 3 & 4 data with NFC tags / cards
Flutter NFC Kit #
Yet another plugin to provide NFC functionality on Android and iOS.
This plugin supports:
- read metadata of tags / cards complying with:
- ISO 14443 Type A & Type B (NFC-A / NFC-B / MIFARE Classic / MIFARE Plus / MIFARE Ultralight / MIFARE DESFire)
- ISO 18092 (NFC-F / FeliCa)
- ISO 15963 (NFC-V)
- transceive commands with tags / cards complying with:
- ISO 7816 Smart Cards (layer 4, in APDUs)
- other device-supported technologies (layer 3, in raw commands, Android only)
Note that due to API limitations not all operations are supported on both platforms.
Setup #
Thank nfc_manager plugin for these instructions.
Android #
- Add android.permission.NFC to your
AndroidManifest.xml
.
iOS #
-
Add Near Field Communication Tag Reader Session Formats Entitlements to your entitlements.
-
Add NFCReaderUsageDescription to your
Info.plist
. -
Add com.apple.developer.nfc.readersession.felica.systemcodes and com.apple.developer.nfc.readersession.iso7816.select-identifiers to your
Info.plist
as needed.
Usage #
Simple example:
import 'package:flutter_nfc_kit/flutter_nfc_kit.dart';
var availability = await FlutterNfcKit.nfcAvailability;
if (availability != NFCAvailability.available) {
// oh-no
}
// timeout only works on Android, while the latter two messages are only for iOS
var tag = await FlutterNfcKit.poll(timeout: Duration(seconds: 10),
iosMultipleTagMessage: "Multiple tags found!", iosAlertMessage: "Scan your tag");
print(jsonEncode(tag));
if (tag.type == NFCTagType.iso7816) {
var result = await FlutterNfcKit.transceive("00B0950000", Duration(seconds: 5)); // timeout is still Android-only, persist until next change
print(result);
}
// iOS only: set alert message on-the-fly
// this will persist until finish()
await FlutterNfcKit.setIosAlertMessage("hi there!");
// read NDEF records if available
if (tag.ndefAvailable){
for (var record in await FlutterNfcKit.readNDEF(cached: false)) {
print(jsonEncode(record));
}
}
// Call finish() only once
await FlutterNfcKit.finish();
// iOS only: show alert/error message on finish
await FlutterNfcKit.finish(iosAlertMessage: "Success");
// or
await FlutterNfcKit.finish(iosErrorMessage: "Failed");
A more complicated example can be seen in example
dir.
Refer to the documentation for more information.
Error codes #
We use error codes with similar meaning as HTTP status code. Brief explanation and error cause in string (if available) will also be returned when an error occurs.