Flutter NFC读取插件flutter_nfc_reader的使用

发布于 1周前 作者 bupafengyu 来自 Flutter

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: 标签的ID
  • content: 标签的内容
  • 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

1 回复

更多关于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();
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!