首页 > 解决方案 > 导航到新屏幕时应该如何暂停相机?

问题描述

我正在为 Flutter 应用程序创建条形码扫描仪功能。大部分工作都是由 FlutterFire 的优秀人员完成的,我使用的是他们在 github 上的示例,在这里可以找到

我的问题:在找到条形码时离开此屏幕并在用户按下返回时返回而不离开相机扫描或在后台处于活动状态的最佳方式是什么?

编辑

问题在于暂停_camera.startImageStream, 和ScannerUtils.detect(函数。

_initializeCamera在等待 Navigator.push 后尝试调用该函数,但似乎在视图准备好之前没有完成初始化函数。

标签: flutterdart

解决方案


在导航到新屏幕之前,我通过调用此函数解决了这个问题:

void closeCameraAndStream() async {
  if (_camera.value.isStreamingImages) {
    await _camera.stopImageStream();
}
await _camera.dispose();

setState(() {
  _camera = null;
  _scanResults = null;
});
}

另外,我在返回屏幕时重新初始化相机,使用这个:

Navigator.of(context)
            .push(MaterialPageRoute(builder: (BuildContext routeContextcontext) => BarcodeResultScreen(barcodeValue)))
            .then((value) {
          _initializeCamera();
        });

推荐阅读