Flutter - 如何暂停 QR 扫描阅读

3
我正在开发一个二维码扫描应用程序,并使用 qr_code_scanner 0.5.2。
当我扫描一个二维码时,我的应用程序会跳转到另一个页面并显示扫描的二维码,但应用程序仍在扫描二维码,新页面会不断出现,直到您不再关注任何二维码。
我该如何逐个扫描代码,在另一页上暂停扫描,并在关闭新页面时恢复扫描?
谢谢
代码:
  void _onQRViewCreated(QRViewController controller) {
setState(() {
  this.controller = controller;
});
controller.scannedDataStream.listen((scanData) {
  setState(() {
    controller.pauseCamera();
    Navigator.push(context,
      MaterialPageRoute(builder: (context) {
        return ReadData(data: scanData.code);
      }),
    );
    controller.resumeCamera();
  });
});

}

编辑:

解决方案代码:

  void _onQRViewCreated(QRViewController controller) {
  this.controller = controller;

controller.scannedDataStream.listen((scanData) async {
 
  controller.pauseCamera();
  await Navigator.push(
    context,
    MaterialPageRoute(builder: (context) {
      return ReadData(data: scanData.code);
    }),
  );
  
  controller.resumeCamera();
});

}

1个回答

4
< p > qr_code_scanner 控制器有一个名为 pauseCamera 的方法,用于在检测到有效的条形码时暂停相机。

编辑:如果 pauseCamera 不起作用,则可以添加布尔变量并在获得有效QR代码时将其切换为 true。仅当此变量为 false 时,导航到新页面。

我已更新代码,请查看。

...
bool gotValidQR = false; //toggle this value when you got a new qr code
...
controller.scannedDataStream.listen((scanData)async {
    if(gotValidQR) {
      return;
    }
    gotValidQR = true;
    dynamic pop = await Navigator.push(
      context,
      MaterialPageRoute(builder: (context) {
        return ScannedData(data: scanData.code);
      }),
    );
    gotValidQR  = false;
});
...

谢谢你的回答。暂停是可以的,我也这么做了,但是我无法重新开始扫描。我使用了这段代码,但它不起作用,因为它不能停止扫描。我已经更新了原帖。 - Scarg
@Scarg,我已经更新了代码,请尝试使用该方法。 - HasilT
谢谢您的回复。它几乎可以工作了。您的代码已经停止了新页面弹出,但在后台仍然在扫描,所以我在validQr之后添加了暂停和恢复,现在它可以正常工作了。谢谢(我已经更新了原帖并附上了解决方案代码)。 - Scarg
我进行了更多的测试,我的原始代码在使用async和await时运行良好。谢谢。 - Scarg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接