繁体   English   中英

是否可以在抖动中读取Mifare Ultralight NFC芯片?

[英]Is it possible to read a Mifare Ultralight NFC chip in flutter?

我正在创建一个需要读取NFC芯片的移动应用程序,但是这些芯片是Mi​​Fare Ultralight芯片,并且是MIFARE ultralight格式。 有谁知道一个库,或者我可以用来制作允许我读取这些芯片的库的资源?

请使用尝试此包https://github.com/akeblom/flutter-nfc-reader
它修复了一些原始问题,并增加了写入NFC功能。
您可以直接使用示例或fork。
它可以在真实设备上正常工作。

import 'dart:async';
import 'dart:convert';
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_nfc_reader/flutter_nfc_reader.dart';

void main() => runApp(MyApp());

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

class _MyAppState extends State<MyApp> {
  NfcData _nfcData;

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

  Future<void> startNFC() async {
    setState(() {
      _nfcData = NfcData();
      _nfcData.status = NFCStatus.reading;
    });

    print('NFC: Scan started');

    print('NFC: Scan readed NFC tag');
    FlutterNfcReader.read.listen((response) {
      setState(() {
        _nfcData = response;
      });
    });
  }

  Future<void> writeNFC() async {
    setState(() {
      _nfcData = NfcData();
      _nfcData.status = NFCStatus.writing;
    });

    print('NFC: Scan started');
    print('NFC: Scan readed NFC tag');

    Map<String, String> jsonData = {"test": "This is json data"};
    var jsonStr = jsonEncode(jsonData);

    FlutterNfcReader.writeToCard(jsonStr).listen((response) {
      setState(() {
        _nfcData = response;
      });
    });
    // FlutterNfcReader.write.listen((response) {
    //   setState(() {
    //     _nfcData = response;
    //   });
    // });
  }

  Future<void> stopNFC() async {
    NfcData response;

    try {
      print('NFC: Stop scan by user');
      response = await FlutterNfcReader.stop;
    } on PlatformException {
      print('NFC: Stop scan exception');
      response = NfcData(
        id: '',
        content: '',
        error: 'NFC scan stop exception',
        statusMapper: '',
      );
      response.status = NFCStatus.error;
    }

    setState(() {
      _nfcData = response;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
          appBar: AppBar(
            title: const Text('Plugin example app'),
          ),
          body: SafeArea(
            top: true,
            bottom: true,
            child: Center(
              child: ListView(
                children: <Widget>[
                  SizedBox(
                    height: 10.0,
                  ),
                  Text(
                    '- NFC Status -\n',
                    textAlign: TextAlign.center,
                  ),
                  Text(
                    _nfcData != null ? 'Status: ${_nfcData.status}' : '',
                    textAlign: TextAlign.center,
                  ),
                  Text(
                    _nfcData != null ? 'Identifier: ${_nfcData.id}' : '',
                    textAlign: TextAlign.center,
                  ),
                  Text(
                    _nfcData != null ? 'Content: ${_nfcData.content}' : '',
                    textAlign: TextAlign.center,
                  ),
                  Text(
                    _nfcData != null ? 'Error: ${_nfcData.error}' : '',
                    textAlign: TextAlign.center,
                  ),
                  RaisedButton(
                    child: Text('Start NFC'),
                    onPressed: () {
                      startNFC();
                    },
                  ),
                  if (!Platform.isIOS)
                    RaisedButton(
                      child: Text('Write NFC'),
                      onPressed: () {
                        writeNFC();
                      },
                    ),
                  RaisedButton(
                    child: Text('Stop NFC'),
                    onPressed: () {
                      stopNFC();
                    },
                  ),
                ],
              ),
            ),
          )),
    );
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM