Flutter mobile_scanner 无法检测 iOS 设备上的二维码

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

这是我的第一篇 Stack Overflow 帖子!我在构建 Flutter 应用程序方面处于中级水平,现在我尝试在 Flutter 中使用 mobile_scanner 4.0.1 包,因为它提供了一个很好的可定制全屏扫描窗口。检测条形码在 Android 设备上按预期工作,但是在 iOS 设备上,_mobileScannerController 仍然可以工作(即我可以转动相机、重新启动控制器、打开手电筒等),但它永远不会检测到条形码并调用 onDetect。我的 iOS 设备都在设置中打开了相机应用程序 QR 选项,并且我没有收到任何错误消息。测试的设备年龄从 1 年到 7 年不等。

我 100% 确定我已遵循如何正确安装 mobile_scanner 的说明,我尝试过旧版本、新旧 iOS 设备,打开和关闭相机中的 QR 选项(iPhone 设置 -> 常规 -> 相机.. .) 恐怕问题出在我的代码之外和我的安装中的某个地方。我已在 info.plist 文件中请求 NSCameraUsageDescription 。这是我的代码:

import 'dart:developer';


import 'dart:io';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:mobile_scanner/mobile_scanner.dart';

import 'scanner_error_widget.dart';

class BarcodeScannerWithScanWindow extends StatefulWidget {

  late _BarcodeScannerWithScanWindowState barcodeScannerState;
  @override
  _BarcodeScannerWithScanWindowState createState() {
    barcodeScannerState = _BarcodeScannerWithScanWindowState();
    return barcodeScannerState;
  }


  getState() => barcodeScannerState;
}

class _BarcodeScannerWithScanWindowState
    extends State<BarcodeScannerWithScanWindow> {

  refresh() {
    log("qr_scanner: Refreshing _mobileScannerController");
    _mobileScannerController.stop();
    _mobileScannerController.start();
  }

  final MobileScannerController _mobileScannerController = MobileScannerController(
    formats: [BarcodeFormat.qrCode],
    facing: CameraFacing.back,
    detectionSpeed: DetectionSpeed.noDuplicates,
    detectionTimeoutMs: 60*1000
  );


  Barcode? barcode;
  BarcodeCapture? capture;

  @override
  void initState() {
    log("INIT");
    super.initState();
    _mobileScannerController.start();
  }

  @override
  dispose() {
    log("DISPOSE");
    _mobileScannerController.dispose();
    super.dispose();
  }

  Future<void> onDetect(BarcodeCapture barcode) async {
    log("DETECTED!");
    capture = barcode;
    setState(() => this.barcode = barcode.barcodes.first);
  }

  MobileScannerArguments? arguments;

  @override
  Widget build(BuildContext context) {
    final scanWindow = Rect.fromCenter(
      center: MediaQuery.of(context).size.center(const Offset(0, -100)),//.center(Offset.zero),
      width: 200,
      height: 200,
    );


    return Scaffold(

      appBar: AppBar(
        elevation: 8.0,
        backgroundColor: Colors.black,
        automaticallyImplyLeading: false,


        // filters
        actions: [
          IconButton(
            onPressed: () {
              _showInfoDialog(context);
            },
            icon: Icon(Icons.info_outlined, color: Colors.white),
          ),
          const SizedBox(width: 8.0),
        ],
      ),


      body: Builder(
        builder: (context) {
          return Stack(
            fit: StackFit.expand,
            children: [
              MobileScanner(
                fit: BoxFit.cover,
                scanWindow: scanWindow,
                controller: _mobileScannerController,
                onScannerStarted: (arguments) {
                  print("SCANNER STARTED");
                  setState(() {
                    this.arguments = arguments;
                  });
                },
                errorBuilder: (context, error, child) {
                  return ScannerErrorWidget(error: error);
                },
                onDetect: onDetect,
              ),

              CustomPaint(
                painter: ScannerOverlay(scanWindow),
              ),
              

            ],
          );
        },
      ),
    );
  }
}

感谢您抽出宝贵时间!

ios flutter mobile avfoundation barcode
1个回答
0
投票

也许检查 github 开发者页面上的问题:看来你并不孤单 https://github.com/juliansteenbakker/mobile_scanner/issues/967

顺便说一句,您可以尝试使用来自 google 的 mlkit 来使用 flutter 插件,该插件运行良好,以防您无法调试/查看这些插件的任何日志https://pub.dev/packages/google_mlkit_barcode_scanning

© www.soinside.com 2019 - 2024. All rights reserved.