Как изменить активность в флаттере при соответствующем вызове nf c? - PullRequest
1 голос
/ 27 апреля 2020

Я новичок в трепетании, и у меня проблема с вызовом NF C.

Я просто хочу изменить активность при соответствующем вызове NF C. Например: если на теге NF C написано «Card1», он откроет активность Card1 с домашней страницы. Если написано «Card2», он откроет активность Card2 и т. д.

Я используя этот плагин: https://pub.dev/packages/nfc_in_flutter# -readme-tab-

Я импортирую его в метод initState (), но он не работает:

NDEFMessage message = NFC.readNDEF(once: true).first as NDEFMessage;
  print("payload: ${message.payload}");
  if (message.payload == 'Card3') {
    Navigator.push(context, MaterialPageRoute(builder: (context) => Menu()));
  }

I также попробовал это:

if (NFCMessage == Text('Card3')) {
  Navigator.push(context, MaterialPageRoute(builder: (context) => MenuStFulState()));
}

но это тоже не работает. Я также пытался изменить метод initState () на asyn c, но он тоже не работает

Вот мой код:

main.dart

import 'dart:async';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:nfc_in_flutter/nfc_in_flutter.dart';
import 'package:nfcflutterapp/Menu.dart';

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

class NfcApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        backgroundColor: Color.fromARGB(255, 248, 248, 248),
        appBar: AppBar(
          title: Text("Presto"),
          backgroundColor: Colors.yellow,
        ),
        body: NfcStFul(),


    ),
    );
  }
}

class NfcStFul extends StatefulWidget {
  @override
  _NfcStFulState createState() => _NfcStFulState();
}

class _NfcStFulState extends State<NfcStFul> {

  bool _supportsNFC = false;
  bool _reading = true;
  StreamSubscription<NDEFMessage> _stream;

  @override
  void initState() {
    super.initState();
    NFC.isNDEFSupported.then((bool isSupported) {
      setState(() {
        _supportsNFC = isSupported;
      });
    });
    NDEFMessage message = NFC.readNDEF(once: true).first as NDEFMessage;
    print("payload: ${message.payload}");
    if (message.payload == 'Card3') {
      Navigator.push(
          context, MaterialPageRoute(builder: (context) => Menu()));
    }
  }

  @override
  Widget build(BuildContext context) {
    if (!_supportsNFC) {
      return Center(
        child: RaisedButton(
          child: Text('Ups.. Your phone doesn\'t have NFC'),
          onPressed: null,
        ),
      );
    } else {
      return Center(
        child: RaisedButton(
            child: Text(
              'Main Actvity',
              style: TextStyle(color: Colors.white),
            ),
            color: Colors.blue,
            onPressed: null;
        ),
      );
    }
  }
}

menu.dart, где он должен go

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

class Menu extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Menu'),
        backgroundColor: Colors.yellow,
      ),
      body: SafeArea(
        child: Center(
          child: RaisedButton(
            color: Colors.green,
            onPressed: () {
              Navigator.pop(context);
            },
            child: Text(
              'Menu Activity',
              style: TextStyle(color: Colors.white),
            ),
          ),
        ),
      ),
    );
  }
}
...