Flutter iOS项目使用flutter_zxing的ReaderWidget时相机权限异常
核对权限配置细节
确认Info.plist里的键名完全准确:NSCameraUsageDescription和NSPhotoLibraryUsageDescription,别出现大小写错误或拼写失误;同时要确保这些配置是加在Runner target对应的Info.plist里,不是项目根目录的那个配置文件——很多人会误改到项目级配置,导致权限不生效。也可以直接在Xcode里检查:选中Runner → Info → 下拉到Custom iOS Target Properties,确认两个权限的键值对存在且描述文本不为空。彻底清理项目后重建
执行flutter clean清除Flutter缓存;删除ios目录下的Pods文件夹和Podfile.lock文件(命令:rm -rf ios/Pods ios/Podfile.lock);然后进入ios目录执行pod install重新安装依赖;最后重启Xcode和Flutter项目,重新编译运行。手动触发权限请求
不要依赖flutter_zxing自动申请权限,改用permission_handler库提前手动请求:- 在pubspec.yaml里添加
permission_handler依赖 - 在打开相机页面的逻辑前,先执行权限请求:
import 'package:permission_handler/permission_handler.dart'; Future<void> requestRequiredPermissions() async { final cameraPerm = await Permission.camera.request(); final photoPerm = await Permission.photos.request(); if (cameraPerm.isDenied || photoPerm.isDenied) { // 这里可以弹窗提示用户去系统设置开启权限 } }
等权限请求通过后,再初始化ReaderWidget。
- 在pubspec.yaml里添加
检查Xcode项目配置
进入Xcode的Runner → Signing & Capabilities,确认Camera和Photos权限没有被意外移除;再检查Build Settings里的Info.plist路径是否正确,确保指向的是Runner目录下的配置文件。排查版本兼容性
检查flutter_zxing的版本和当前Flutter版本是否兼容,尝试升级或降级flutter_zxing到官方标注的稳定版本;同时确保Flutter使用的是稳定分支,避免dev/beta版带来的适配问题。
内容的提问来源于stack exchange,提问作者marks

