M1 Mac开发Flutter时iOS模拟器image_picker返回null问题求助
可按以下步骤依次排查解决:
第一步:检查iOS端权限配置
你需要在项目ios/Runner/Info.plist文件中添加相册访问权限声明,没有该配置iOS会直接拦截相册访问请求,返回null:<key>NSPhotoLibraryUsageDescription</key> <string>需要访问相册以选择图片</string>如果你还会用到相机功能,还要额外添加
NSCameraUsageDescription权限声明。第二步:处理M1芯片iOS模拟器兼容问题
你使用的image_picker: ^0.8.3+1版本存在M1芯片Mac上iOS 14模拟器的兼容bug,可选择任意一种方案解决:- 升级
image_picker版本至0.8.4+及以上,该版本已修复M1模拟器兼容问题 - 不升级版本的情况下,右键打开访达->应用程序->找到Xcode->右键显示包内容->Contents->Developer->Applications->找到模拟器.app->右键显示简介->勾选「使用Rosetta打开」,重启模拟器后再运行项目
- 执行
pod install时M1芯片设备需使用命令arch -x86_64 pod install避免架构兼容报错
- 升级
第三步:修复代码空安全问题
你的代码中直接对pickedFile使用强制解包!,如果用户主动取消了图片选择,pickedFile会返回null,强制解包会直接触发异常进入catch逻辑,建议改为判空后再处理:Future _getImageFromGallery() async { try { var pickedFile = await picker.pickImage(source: ImageSource.gallery); // 新增非空判断 if (pickedFile != null) { print('pickedFile: ${pickedFile.path}'); setState(() { imagePath = File(pickedFile.path); }); } else { print('用户取消了图片选择'); } } catch (error) { print('error: $error'); } }第四步:清理缓存重新构建
如果以上步骤都操作后仍有问题,执行以下命令清理缓存后重新运行项目:flutter clean rm -rf ios/Pods ios/Podfile.lock flutter pub get cd ios && arch -x86_64 pod install
内容的提问来源于stack exchange,提问作者Luca Phen
相关产品推荐
相关产品推荐

