Provide NFC functionality on Android, iOS & Web, including reading metadata, read & write NDEF records, and transceive layer 3 & 4 data with NFC tags / cards
Package selection guidance compiled from public package information, community data, and project usage.
flutter_nfc_kit is a cross-platform Flutter package that enables NFC functionality on Android, iOS, and Web. It allows developers to read and write NDEF records, access metadata from NFC tags, and perform low-level transceive operations at layer 3 and 4. The package supports a wide range of NFC use cases, including contactless data exchange, smart tag interactions, and secure communication with NFC cards. With a consistent API across platforms, it simplifies integration of NFC features into Flutter applications.
Use cases
Reading and writing NDEF records
Accessing NFC tag metadata
Performing low-level NFC communication
Building contactless payment or ticketing apps
Enabling smart poster interactions
Integrating with NFC-enabled IoT devices
Key features
Cross-platform support (Android, iOS, Web)
NDEF record reading and writing
Metadata extraction from NFC tags
Layer 3 & 4 transceive capabilities
Consistent API across platforms
Real-time NFC tag detection
Suitable for
Developers building NFC-based mobile apps
Applications requiring contactless data transfer
Smart device interaction systems
Event ticketing and access control solutions
IoT and embedded system integrations
Considerations
Requires device with NFC hardware
Permissions must be handled on each platform
Web support limited to compatible browsers
iOS requires background mode configuration
Performance may vary by device and tag type
Limited support for advanced NFC protocols
Original README
Original README snapshot from the linked source repository. Visit the repository for the latest content.
Flutter NFC Kit
Yet another plugin to provide NFC functionality on Android, iOS and browsers (by WebUSB, see below).
This plugin's functionalities include:
read metadata and read & write NDEF records 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 15693 (NFC-V)
R/W block / page / sector level data of tags complying with:
transceive raw commands with tags / cards complying with:
ISO 7816 Smart Cards (layer 4, in APDUs)
other device-supported technologies (layer 3, in raw commands, see documentation for platform-specific supportability)
Note that due to API limitations, not all operations are supported on all platforms.
You are welcome to submit PRs to add support for any standard-specific operations.
This library uses ndef for NDEF record encoding & decoding.
Open Runner.xcworkspace with Xcode and navigate to project settings then the tab Signing & Capabilities.
Select the Runner in targets in left sidebar then press the "+ Capability" in the left upper corner and choose Near Field Communication Tag Reading.
Web
The web version of this plugin does not actually support NFC in browsers, but uses a specific WebUSB protocol, so that Flutter programs can communicate with dual-interface (NFC / USB) devices in a platform-independent way.
Make sure you understand the statement above and the protocol before using this plugin.
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.
Operation Mode
We provide two operation modes: polling (default) and event streaming. Both can give the same NFCTag object. Please see example for more details.
Performance Optimization (Android)
For Android applications, you can optimize NFC tag detection performance using the androidReaderModeFlags parameter:
// Skip automatic NDEF discovery for ~500ms faster detection// and disable platform sounds for custom feedbackconst flags = 0x80 | 0x100; // FLAG_READER_SKIP_NDEF_CHECK | FLAG_READER_NO_PLATFORM_SOUNDSfinal tag = awaitFlutterNfcKit.poll(
androidReaderModeFlags: flags,
);