Я новичок в трепетании, и у меня проблема с вызовом 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),
),
),
),
),
);
}
}