在我的应用程序中,我扫描第一页上的条形码,并在扫描到有效条形码后调用第二页。在第二页上,我必须编辑一些TextField。我在调用导航器之前先关闭相机,然后在使用Navigator.of(context).push()方法的.then()关闭第二页时再次启动它。 问题如下:当我单击文本字段时,出现键盘并触发上述.then()。我该如何做才能仅在我从第二页返回时才调用它?
if(result != null){
Navigator.push(scanned.context, MaterialPageRoute(builder: (BuildContext context) {
return InventoryItemSetQuantities(product: result, inventoryBloc: this, qrViewController: scanned.qrViewController);
})).then((value) => scanned.qrViewController.resumeCamera());
}
答案 0 :(得分:0)
[编辑] 好的,抱歉,您填写完文本字段后,需要在页面弹出时打开条形码扫描仪。在这种情况下,最简单的方法是在处理完第二页后(弹出后)打开条形码扫描仪。这样做:
@override
void dispose() {
super.dispose();
scanned.qrViewController.resumeCamera()
}
确保尽管有对条形码扫描仪的引用。您可能必须作为构造函数进入第二页,然后通过小部件对象访问扫描仪的引用,如下所示:
@override
void dispose() {
super.dispose();
widget.scanned.qrViewController.resumeCamera() //**scanned** is the passed barcode scanner from the first page
}
在原始代码中,请确保在 then()回调后删除条形码扫描仪。这样做:
if(result != null){
Navigator.push(scanned.context, MaterialPageRoute(builder: (BuildContext context) {
return InventoryItemSetQuantities(product: result, inventoryBloc: this, qrViewController: scanned.qrViewController);
}));
}