Flutter NFC读写插件flutter_gb_pos_nfc的使用

Flutter NFC读写插件flutter_gb_pos_nfc的使用

开始使用

本项目是一个用于Flutter的插件包,它包含了Android和/或iOS平台上的特定实现代码。

对于刚开始使用Flutter的开发者,可以查看我们的在线文档,里面提供了教程、示例、移动开发指南以及完整的API参考。


示例代码

以下是使用flutter_gb_pos_nfc插件的基本示例。该示例展示了如何读取NFC卡的信息。

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

import 'package:flutter/services.dart';
import 'package:flutter_gb_pos_nfc/flutter_gb_pos_nfc.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String? _cardID;
  TextEditingController testController = TextEditingController();

  [@override](/user/override)
  void initState() {
    super.initState();
  }

  // 读取NFC卡信息的方法
  Future<void> cardRead() async {
    GBPosNfc.readCard().listen((PosNfcData cardInfo) {
      setState(() {
        _cardID = cardInfo.id; // 设置卡片ID
        testController.text = cardInfo.id ?? "-"; // 更新文本框内容
      });
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Column(
          mainAxisAlignment: MainAxisAlignment.spaceAround,
          children: [
            MaterialButton(
              child: const Text(
                "读取",
                style: TextStyle(
                  color: Colors.white,
                  fontSize: 20,
                ),
              ),
              onPressed: () async {
                cardRead(); // 触发读取操作
              },
              color: Colors.green,
            ),
            Center(
              child: Text('卡片ID: $_cardID\n'), // 显示卡片ID
            ),
            TextField(
              controller: testController, // 绑定文本框
              maxLines: 8,
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter NFC读写插件flutter_gb_pos_nfc的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


当然,以下是如何在Flutter项目中使用flutter_gb_pos_nfc插件进行NFC读写操作的示例代码。这个插件允许你通过NFC与设备进行交互,包括读取和写入NFC标签。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加flutter_gb_pos_nfc依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_gb_pos_nfc: ^最新版本号  # 请替换为最新的版本号

然后运行flutter pub get来安装依赖。

2. 权限配置

由于NFC功能需要特定的权限,你需要在AndroidManifest.xml中添加NFC权限:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yourapp">

    <uses-permission android:name="android.permission.NFC" />
    <uses-feature android:name="android.hardware.nfc" android:required="true" />

    <application
        ... >
        ...
        <activity ... >
            ...
            <intent-filter>
                <action android:name="android.nfc.action.NDEF_DISCOVERED" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="text/plain" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.nfc.action.TECH_DISCOVERED" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <meta-data
                android:name="android.nfc.action.TECH_LIST"
                android:resource="@xml/nfc_tech_filter" />
        </activity>
    </application>
</manifest>

你还需要在res/xml目录下创建一个名为nfc_tech_filter.xml的文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <tech-list>
        <tech>android.nfc.tech.NfcA</tech>
        <tech>android.nfc.tech.NfcB</tech>
        <tech>android.nfc.tech.NfcF</tech>
        <tech>android.nfc.tech.NfcV</tech>
        <tech>android.nfc.tech.IsoDep</tech>
        <tech>android.nfc.tech.MifareClassic</tech>
        <tech>android.nfc.tech.MifareUltralight</tech>
        <tech>android.nfc.tech.Ndef</tech>
        <tech>android.nfc.tech.NdefFormatable</tech>
    </tech-list>
</resources>

3. 初始化NFC

在你的Flutter应用中,你需要初始化NFC插件并进行读写操作。以下是一个简单的示例:

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  NfcManager? nfcManager;

  @override
  void initState() {
    super.initState();
    _initNfc();
  }

  Future<void> _initNfc() async {
    nfcManager = await NfcManager.instance;

    nfcManager!.startSession().then((_) {
      print("NFC session started");
      _startNfcPolling();
    }).catchError((error) {
      print("Error starting NFC session: $error");
    });
  }

  Future<void> _startNfcPolling() async {
    nfcManager!.setOnNdefDiscoveredListener((NfcNdefMessage message) {
      print("NFC tag discovered: $message");
      // Handle the NFC tag data here
    });

    nfcManager!.setOnTagDiscoveredListener((NfcTag tag) {
      print("NFC tag discovered (generic): $tag");
      // Handle the NFC tag here
    });

    nfcManager!.startPolling();
  }

  Future<void> _writeNfcTag(NfcTag tag, String data) async {
    try {
      NfcNdefRecord record = NfcNdefRecord.createTextRecord("en", data);
      NfcNdefMessage message = NfcNdefMessage([record]);
      await tag.connect();
      await tag.writeNdefMessage(message);
      print("Data written to NFC tag: $data");
    } catch (error) {
      print("Error writing to NFC tag: $error");
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('NFC Demo'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // This is just an example. In a real app, you would wait for a tag to be discovered first.
              // Here, we assume you have a way to get a tag instance.
              NfcTag? tag = await _getNfcTagInstance(); // This method should return an NfcTag instance, you need to implement it based on your app's logic.
              if (tag != null) {
                await _writeNfcTag(tag, "Hello, NFC!");
              } else {
                print("No NFC tag available");
              }
            },
            child: Text('Write to NFC Tag'),
          ),
        ),
      ),
    );
  }

  // Dummy method to represent getting an NFC tag instance. You need to implement this based on your app's logic.
  Future<NfcTag?> _getNfcTagInstance() async {
    // Return an NfcTag instance if available, otherwise return null.
    return null; // Replace with actual logic.
  }
}

注意事项

  1. 权限请求:在实际应用中,你需要请求NFC权限,并在用户授予权限后再执行NFC操作。
  2. NFC标签实例:上述代码中的_getNfcTagInstance方法是一个占位符,你需要根据实际的NFC标签发现逻辑来实现它。
  3. 错误处理:在实际应用中,你应该添加更多的错误处理逻辑,以确保应用的健壮性。

这个示例展示了如何使用flutter_gb_pos_nfc插件进行基本的NFC读写操作。根据实际需求,你可能需要进一步调整和扩展代码。

回到顶部