导航到主屏幕时出现 Flutter 条码扫描仪问题

问题描述 投票:0回答:1

我正在使用 flutter 的“mobile_scanner”包来扫描一个屏幕中的条形码并返回主屏幕并显示结果。这是我的扫描仪屏幕代码:

  Barcode? _barcode;

  void _handleBarcode(BarcodeCapture barcodes) {
    if (mounted) {
      final barcode = barcodes.barcodes.firstOrNull;
      setState(() {
        _barcode = barcode;
      });

      Navigator.pop(context, _barcode!.rawValue);
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Scan Barcode'),
      ),
      body: Center(
        child: MobileScanner(
          controller: MobileScannerController(
              detectionSpeed: DetectionSpeed.noDuplicates),
          onDetect: _handleBarcode,
        ),
      ),
    );
  }

这是我用来调用扫描仪屏幕的代码:

MaterialButton(
                  onPressed: () async {
                    var result = await Navigator.push(
                        context,
                        MaterialPageRoute(
                          builder: (context) => const ScannerScreen(),
                        ));
                    if (result != null) {
                      setState(() {
                        scannedBarcode = result.toString();
                      });
                    }
                  },  
                  child: const Icon(Icons.barcode_reader),
                ),

在一瞬间,我看到了“scanner_screen”的结果,并且条形码值是正确的,问题是黑屏突然出现并覆盖了整个应用程序。 a screenshot showing the problem

flutter navigation barcode-scanner
1个回答
0
投票

我发现,根据“mobile_scanner”包的官方文档,似乎必须处理“MobileScannerController”才能获得没有错误的刷新结果。这是我的新代码:

Barcode? _barcode;
  MobileScannerController? controller =
      MobileScannerController();
  void _handleBarcode(BarcodeCapture barcodes) async {
    if (mounted) {
      final barcode = barcodes.barcodes.firstOrNull;
      setState(() {
        _barcode = barcode;
      });
      await controller!.dispose();
      Navigator.pop(context, _barcode!.rawValue);
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Scan Barcode'),
      ),
      body: Center(
        child: MobileScanner(
          controller: controller,
          onDetect: _handleBarcode,
        ),
      ),
    );
  }
© www.soinside.com 2019 - 2024. All rights reserved.