Flutter中有无不与image_picker冲突的二维码/条码扫描插件?
解决Flutter二维码/条码扫描插件与
image_picker冲突的方案 我之前开发类似「扫码连服务器+商品条码扫描+图片上传」的应用时,也踩过barcode_scan这类插件和image_picker冲突的坑,给你推荐几个亲测兼容的替代方案,附上手要点:
推荐插件1:qr_code_scanner
这个插件基于Android的Camera2 API和iOS的AVFoundation实现,和image_picker的依赖链完全不重叠,不会出现资源抢占的冲突问题。
- 添加依赖:在
pubspec.yaml里加入:qr_code_scanner: ^1.0.1 - 基础用法示例:
import 'package:qr_code_scanner/qr_code_scanner.dart'; class ScanScreen extends StatefulWidget { @override _ScanScreenState createState() => _ScanScreenState(); } class _ScanScreenState extends State<ScanScreen> { final GlobalKey qrKey = GlobalKey(debugLabel: 'QR'); QRViewController? controller; @override void dispose() { controller?.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( body: QRView( key: qrKey, onQRViewCreated: _onQRViewCreated, ), ); } void _onQRViewCreated(QRViewController controller) { this.controller = controller; controller.scannedDataStream.listen((scanData) { // 处理扫描到的二维码/条码数据 print(scanData.code); controller.stopCamera(); Navigator.pop(context, scanData.code); }); } } - 权限配置:
- Android:在
AndroidManifest.xml中添加相机权限:<uses-permission android:name="android.permission.CAMERA" /> - iOS:在
Info.plist中添加相机权限描述:<key>NSCameraUsageDescription</key> <string>需要相机权限进行扫码</string>
- Android:在
推荐插件2:flutter_barcode_scanner
这个插件采用原生平台的独立扫码实现,和image_picker的资源调用逻辑完全分离,稳定性不错,支持二维码和多种条码格式。
- 添加依赖:
flutter_barcode_scanner: ^2.0.0 - 基础用法示例:
import 'package:flutter_barcode_scanner/flutter_barcode_scanner.dart'; Future<void> scanBarcode() async { String barcodeScanRes; try { barcodeScanRes = await FlutterBarcodeScanner.scanBarcode( '#ff6666', '取消', true, ScanMode.BARCODE); } catch (e) { barcodeScanRes = '扫描失败:$e'; } // 处理扫描结果 print(barcodeScanRes); } - 权限配置和上面一致,确保平台权限都已正确声明。
额外冲突排查建议
如果后续还是遇到依赖冲突,可以试试这些操作:
- 执行
flutter pub cache clean清理缓存后,再重新拉取依赖 - 确保
image_picker和扫描插件都使用最新稳定版本,执行flutter pub upgrade更新所有依赖 - 检查Android项目的
build.gradle中,compileSdkVersion和targetSdkVersion是否统一(建议使用33及以上)
内容的提问来源于stack exchange,提问作者Nato Boram
相关产品推荐
相关产品推荐

