颤振中的基本 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
以避免此行为。
我正在构建一个 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
以避免此行为。