颤振中的基本 QR 码扫描仪 + qr_code_scanner 重复返回结果

Basic QR code scanner in flutter + qr_code_scanner returning results repeated

我正在构建一个 QR 扫描仪来帮助组织 collection。有关项目的基本数据被编码为 json 字符串,然后编码为 QR 码。以编程方式生成此类标签是成功的。下一阶段是在 flutter 中创建一个简单的遮阳板。选择的库是 qr_code_scanner。我的简单应用程序是一个扫描仪,当检测到有效的二维码(一个包含描述所需结构的 json 字符串)时,它会重定向到显示数据的另一个屏幕。扫描仪检测二维码,解析 objects 并推送包含另一个脚手架的小部件。这主要是我想要的,但是检测到一个问题:当检测到有效的二维码时,应用程序会多次推送数据显示屏幕,有时多达 9 次,从而破坏向后导航。

负责处理事件的方法被命名为“onQRViewCreated”(如example)。

void onQRViewCreated(QRViewController controller){
    setState(() => this.controller = controller);
    controller.scannedDataStream.listen(
            (qrData) {
            setState(
                    () {
                  barcode = qrData;
                  if (barcode?.format == BarcodeFormat.qrcode) {
                    try {
                      Item item = Item.fromJSon(
                          jsonDecode(barcode?.code ?? "")
                      );
                      Navigator.push(
                          context,
                          MaterialPageRoute(
                              builder: (context) =>
                                  ItemDisplay(
                                      key: const Key("item"),
                                      item: item
                                  )
                          )
                      );
                    }
                    on FormatException {
                      Fluttertoast.showToast(msg: "Invalid QR Code!");
                    }
                    on Exception {
                      Fluttertoast.showToast(msg: "Error!");
                    }
                  }
                }
            );
          }
    );
  }

我希望只能推送一次 ItemDisplay,但我不知道该怎么做。

提前致谢

await controller.pauseCamera(); 放在 Navigator.push

之前

我建议使用 mobile_scanner 软件包,这是同一作者的较新版本。创建此包的 MobileScanner 小部件时,有一个选项 allowDuplicates,您可以将其设置为 false 以避免此行为。