# flutter-nfc-reader
**Repository Path**: mirrors/flutter-nfc-reader
## Basic Information
- **Project Name**: flutter-nfc-reader
- **Description**: Flutter NFC Reader 是一个新的 Flutter 插件,可帮助希望使用 iOS 或 Android 设备内部硬件读取和写入 NFC 标签的开发人员
- **Primary Language**: Kotlin
- **License**: MIT
- **Default Branch**: master
- **Homepage**: https://www.oschina.net/p/flutter-nfc-reader
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2021-11-15
- **Last Updated**: 2025-12-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Flutter NFC Reader & Writer

A new flutter plugin to help developers looking to use internal hardware inside iOS or Android devices for reading and writing NFC tags.
The system activate a pooling reading session that stops automatically once a tag has been recognised.
You can also trigger the stop event manually using a dedicated function.
## Supported NFC Format
| Platform | Supported NFC Tags |
| -------- | -------------------------------- |
| Android | **NDEF:** A, B, F, V, BARCODE |
| iOS | **NDEF:** NFC TYPE 1, 2, 3, 4, 5 |
## Only Android supports nfc tag writing
## Installation
Add to pubspec.yaml:
```yaml
dependencies:
flutter_nfc_reader: ^0.2.0
```
or to get the experimental one:
```yaml
dependencies:
flutter_nfc_reader:
git:
url: git://github.com/matteocrippa/flutter-nfc-reader.git
ref: develop
```
and then run the shell
```shell
flutter packages get
```
last step import to the project:
```dart
import 'package:flutter_nfc_reader/flutter_nfc_reader.dart';
```
## How to use
### Android setup
Add those two lines to your `AndroidManifest.xml` on the top
```xml
```
Assign 19 in minSdkVersion in the `build.gradle (Module: app)`
```gradle
defaultConfig {
...
minSdkVersion 19
...
}
```
### iOS Setup
Atm only `Swift` based Flutter project are supported.
- Enable Capabilities / Near Field Communication Tag Reading.
- Info.plist file, add Privacy - NFC Scan Usage Description with string value NFC Tag.
In your Podfile add this code in the top
```ruby
platform :ios, '8.0'
use_frameworks!
```
### Read NFC
This function will return a promise when a read occurs, till that very moment the reading session is open.
The promise will return a `NfcData` model, this model contains:
`FlutterNfcReader.read()` and `FlutterNfcReader.onTagDiscovered()` have an optional parameter, only for **iOS**, called `instruction`.
You can pass a _String_ that contains information to be shown in the modal screen.
- id > id of the tag
- content > content of the tag
- error > if any error occurs
```dart
FlutterNfcReader.read().then((response) {
print(response.content);
});
```
### Stream NFC
this function will return a Stream that emits `NfcData` everytime a tag is recognized. On Ios you can use this too but IOS will always show a bottom sheet when it wants to scan a NFC Tag. Therefore you need to explicitly cast `FlutterNfcReader.read()` when you expect a second value. When subscribing to the stream the read function is called a first time for you. View the Example for a sample implementation.
```dart
FlutterNfcReader.onTagDiscovered().listen((onData) {
print(onData.id);
print(onData.content);
});
```
### Write NFC (Only Android)
This function will return a promise when a write occurs, till that very moment the reading session is open.
The promise will return a `NfcData` model, this model contains:
- content > writed in the tag
```dart
FlutterNfcReader.write("path_prefix","tag content").then((response) {
print(response.content);
});
```
### Read & Write NFC (Only Android)
You can read and then write in an nfc tag using the above functions as follows
```dart
FlutterNfcReader.read().then((readResponse) {
FlutterNfcReader.write(" ",readResponse.content).then((writeResponse) {
print('writed: ${writeResponse.content}');
});
});
```
### Stop NFC
- status > status of ncf reading or writing stoped
```dart
FlutterNfcReader.stop().then((response) {
print(response.status.toString());
});
```
For better details look at the demo app.
### Check NFC Availability
In order to check whether the Device supports NFC or not you can call `FlutterNfcReader.checkNFCAvailability()`.
The method returns `NFCAvailability.available` when NFC is supported and enabled, `NFCAvailability.disabled` when NFC is disabled (Android only) and `NFCAvailability.not_supported` when the user's hardware does not support NFC.
### IOS Specifics
IOS behaves a bit different in terms of NFC Scanning and writing.
- Ids of the tags aren't possible in the current implementation
- each scan is visible for the user with a bottom sheet
## Getting Started
For help getting started with Flutter, view our online
[documentation](https://flutter.io/).
For help on editing plugin code, view the [documentation](https://flutter.io/developing-packages/#edit-plugin-package).
## Contributing
Please take a quick look at the [contribution guidelines](https://github.com/matteocrippa/flutter-nfc-reader/blob/master/.github/CONTRIBUTING.md) first. If you see a package or project here that is no longer maintained or is not a good fit, please submit a pull request to improve this file.
Thank you to all [contributors](https://github.com/matteocrippa/flutter-nfc-reader/graphs/contributors)!!
to develop on ios you need to activate the "legacy" build system because of this issue in flutter: