Flutter如何使用flutter_nfc_kit插件

在Flutter项目中使用flutter_nfc_kit插件时遇到了一些问题。我已经按照文档添加了依赖并配置了AndroidManifest.xml,但当调用NfcProvider.read()时总是返回"未检测到NFC设备"。手机本身支持NFC功能,并且已经开启。请问还需要哪些额外配置?iOS和Android的处理方式是否不同?能否提供一个完整的读取NFC标签的代码示例?

2 回复

使用 flutter_nfc_kit 插件在 Flutter 中操作 NFC 的步骤如下:

  1. 添加依赖:在 pubspec.yaml 中添加:

    dependencies:
      flutter_nfc_kit: ^4.0.0
    

    运行 flutter pub get

  2. 配置权限(仅 Android): 在 AndroidManifest.xml 中添加:

    <uses-permission android:name="android.permission.NFC" />
    
  3. 基本使用

    import 'package:flutter_nfc_kit/flutter_nfc_kit.dart';
    
    // 检查 NFC 可用性
    bool available = await FlutterNfcKit.nfcAvailability;
    
    // 开始 NFC 会话
    var tag = await FlutterNfcKit.poll(
      timeout: const Duration(seconds: 10)
    );
    
    // 读取 NDEF 记录(如果有)
    if (tag.ndefAvailable) {
      var records = await FlutterNfcKit.readNDEFRecords();
    }
    
    // 写入 NDEF 记录
    await FlutterNfcKit.writeNDEFRecords(records);
    
    // 结束会话
    await FlutterNfcKit.finish();
    

注意:iOS 仅支持部分 NFC 功能,且需在 Info.plist 中声明用途。建议在实际设备上测试。

更多关于Flutter如何使用flutter_nfc_kit插件的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


Flutter 中使用 flutter_nfc_kit 插件可以方便地实现 NFC 功能,包括读取和写入 NFC 标签。以下是基本步骤和示例代码:

1. 添加依赖

pubspec.yaml 文件中添加依赖:

dependencies:
  flutter_nfc_kit: ^4.0.0

运行 flutter pub get 安装插件。

2. 配置权限(Android 和 iOS)

  • Android:在 android/app/src/main/AndroidManifest.xml 中添加 NFC 权限:
    <uses-permission android:name="android.permission.NFC" />
    
  • iOS:在 ios/Runner/Info.plist 中添加 NFC 使用描述:
    <key>NFCReaderUsageDescription</key>
    <string>用于读取 NFC 标签</string>
    

3. 基本使用示例

import 'package:flutter/material.dart';
import 'package:flutter_nfc_kit/flutter_nfc_kit.dart';

class NFCExample extends StatefulWidget {
  @override
  _NFCExampleState createState() => _NFCExampleState();
}

class _NFCExampleState extends State<NFCExample> {
  String nfcData = "未读取";

  Future<void> readNFC() async {
    try {
      // 检查设备是否支持 NFC
      if (await FlutterNfcKit.nfcAvailability != NFCAvailability.available) {
        setState(() => nfcData = "设备不支持 NFC");
        return;
      }

      // 开始 NFC 会话
      var tag = await FlutterNfcKit.poll(
        timeout: const Duration(seconds: 10),
      );

      // 读取标签信息
      setState(() {
        nfcData = "标签类型: ${tag.type}\n标识: ${tag.id}";
      });

      // 可选:读取 NDEF 记录
      if (tag.standard == "ISO 14443") {
        var records = await FlutterNfcKit.readNDEFRecords();
        for (var record in records) {
          print("NDEF 记录: ${record.data}");
        }
      }

      // 结束会话
      await FlutterNfcKit.finish();
    } catch (e) {
      setState(() => nfcData = "读取失败: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(nfcData),
            ElevatedButton(
              onPressed: readNFC,
              child: Text("读取 NFC"),
            ),
          ],
        ),
      ),
    );
  }
}

4. 注意事项

  • Android:需要 API 级别 19 或更高。
  • iOS:仅支持 iPhone 7 及以上设备,且仅能读取 NDEF 格式标签。
  • 测试时请使用真实 NFC 标签,模拟器无法测试 NFC 功能。

通过以上步骤,即可在 Flutter 应用中集成 NFC 读取功能。更多高级用法(如写入数据)可参考插件的官方文档。

回到顶部