Flutter iOS端视频相册选择器二次选择崩溃问题求助
问题描述
- Flutter版本:3.13.2
- 使用插件:image_picker 1.0.4
- 异常场景:iOS设备从相册选择视频时,首次选择正常,二次选择必定崩溃;Android设备及选择图片时无此问题
- 崩溃日志:
Modifications to the layout engine must not be performed from a background thread after it has been accessed from the main thread - 相关代码:
TextButton( onPressed: () async { final ImagePicker picker = ImagePicker(); final XFile? galleryVideo = await picker.pickVideo(source: ImageSource.gallery); }, child: Text("Pick video from gallery"), ),
- 已尝试操作:升级Flutter及插件至最新版本,问题未解决
解决方案尝试
强制在主线程执行视频选择操作
崩溃日志指向后台线程修改UI布局,可将picker调用包裹在WidgetsBinding.instance.runOnUiThread中,确保操作在主线程执行:TextButton( onPressed: () async { await WidgetsBinding.instance.runOnUiThread(() async { final ImagePicker picker = ImagePicker(); final XFile? galleryVideo = await picker.pickVideo(source: ImageSource.gallery); }); }, child: Text("Pick video from gallery"), ),复用ImagePicker实例
每次创建新实例可能导致iOS侧资源未正确释放,尝试全局复用实例:// 在组件外部或State类中定义全局实例 final ImagePicker _picker = ImagePicker(); // 按钮点击逻辑 TextButton( onPressed: () async { final XFile? galleryVideo = await _picker.pickVideo(source: ImageSource.gallery); }, child: Text("Pick video from gallery"), ),同步Flutter引擎状态
在选择视频前后手动触发UI状态同步,避免线程冲突:TextButton( onPressed: () async { WidgetsBinding.instance.ensureVisualUpdate(); final XFile? galleryVideo = await _picker.pickVideo(source: ImageSource.gallery); WidgetsBinding.instance.addPostFrameCallback((_) { // 处理视频选择后的逻辑,比如更新组件状态 }); }, child: Text("Pick video from gallery"), ),检查iOS原生配置
确认Info.plist中相册权限配置正确,避免权限逻辑导致的线程冲突:<key>NSPhotoLibraryUsageDescription</key> <string>需要访问相册选择视频</string>
内容的提问来源于stack exchange,提问作者Tarun Khatri
相关产品推荐
相关产品推荐

