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
相关产品推荐
相关产品推荐

