当状态更改导致异常行为时推送新页面

时间:2019-11-29 03:59:32

标签: flutter

我是扑朔迷离。每当我的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;
          });
    });
  }

1 个答案:

答案 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)),
        );
    });
}