You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter mobile_scanner 4.0.1在iOS设备上无法检测二维码求助

移动端扫码问题:mobile_scanner 4.0.1在iOS上无法检测二维码

我是中级Flutter应用开发者,这是我首次在Stack Overflow发帖。目前我在使用mobile_scanner 4.0.1包实现自定义全屏扫描窗口功能,二维码检测在Android设备上正常工作,但在iOS设备上遇到了以下问题:

  • _mobileScannerController的各项功能(切换摄像头、重启控制器、开启闪光灯等)均可正常运行,但始终无法检测到二维码,也不会调用onDetect方法
  • 测试覆盖1年至7年的多款iOS设备,所有设备均已在设置中开启相机应用的QR码功能,且未收到任何错误提示
  • 已严格按照mobile_scanner的安装说明操作,尝试过新旧版本包、不同iOS设备,开关过iPhone设置->通用->相机里的QR码选项,怀疑问题出在安装环节而非代码
  • 已在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,
        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),
              ),
            ],
          );
        },
      ),
    );
  }
}

感谢您抽出时间帮忙!

内容的提问来源于stack exchange,提问作者user24510212

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 09:15:56