我是扑朔迷离。每当我的qrcode阅读器检测到qrcode时,我都会尝试推送到新页面。但是,一旦检测到qrcode,就会推送无限页。任何人都可以向我提供一些建议或示例代码,以便在状态发生变化时将其推送到新页面?
class _QRViewExampleState extends State<QRViewExample> {
final GlobalKey qrKey = GlobalKey(debugLabel: 'QR');
_QRViewExampleState({this.state});
var state = false;
QRViewController controller;
@override
Widget build(BuildContext context) {
if (state == true) {
WidgetsBinding.instance.addPostFrameCallback((_) {
Navigator.of(context).push(
MaterialPageRoute(builder: (ctx) => Menu()),
);
// Navigation
});
}
return Scaffold(
...
);
}
void _onQRViewCreated(QRViewController controller) {
this.controller = controller;
controller.scannedDataStream.listen((scanData) {
setState(() {
state = true;
});
});
}
答案 0 :(得分:1)
首先,这行代码:
WidgetsBinding.instance.addPostFrameCallback((_) {});
通常在构建完成后要运行语句时使用,并在initState()内部调用。就您而言,我认为您不需要它。
我建议您在QRViewController侦听器中调用导航器:
_onQRViewCreated(QRViewController controller) {
this.controller = controller;
controller.scannedDataStream.listen((scanData) {
Navigator.of(context).push(
MaterialPageRoute(builder: (ctx) => Menu(scanData)),
);
});
}