Flutter打开键盘会触发我的Navigator.push()回调

时间:2020-10-05 11:35:19

标签: flutter

在我的应用程序中,我扫描第一页上的条形码,并在扫描到有效条形码后调用第二页。在第二页上,我必须编辑一些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());
}

1 个答案:

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