这是我的第一篇 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),
),
],
);
},
),
);
}
}
感谢您抽出宝贵时间!
也许检查 github 开发者页面上的问题:看来你并不孤单 https://github.com/juliansteenbakker/mobile_scanner/issues/967
顺便说一句,您可以尝试使用来自 google 的 mlkit 来使用 flutter 插件,该插件运行良好,以防您无法调试/查看这些插件的任何日志https://pub.dev/packages/google_mlkit_barcode_scanning