Flutter使用gallery_saver批量保存网络图片到相册时应用崩溃如何解决
问题根因
- Dart的
List.forEach不支持等待异步回调执行完成,你的写法会同时触发所有图片的保存请求,所有任务并行执行。 - gallery_saver的原生层实现不支持并行处理多个保存请求,多请求同时触发会导致内部状态错乱,触发日志中出现的空指针异常。
解决方案
将并行保存改为串行保存,一张图片保存完成后再执行下一张的保存操作,使用普通for循环替代forEach即可,代码如下:
int downloadedImages = 0; for (final imageUrl in selectedImages) { final saveSuccess = await GallerySaver.saveImage(imageUrl, albumName: 'My App'); if (saveSuccess == true) { downloadedImages++; } } // 此处可添加全部保存完成后的业务逻辑,例如弹窗提示保存结果
优化建议
可以增加异常捕获逻辑,避免单张图片保存失败导致整个批量任务中断:
int downloadedImages = 0; for (final imageUrl in selectedImages) { try { final saveSuccess = await GallerySaver.saveImage(imageUrl, albumName: 'My App'); if (saveSuccess == true) { downloadedImages++; } } catch (e) { // 可在此处添加单张图片保存失败的处理逻辑,例如日志打印、失败统计 print('图片保存失败:$imageUrl, 错误信息:$e'); } }
内容的提问来源于stack exchange,提问作者Manas
相关产品推荐
相关产品推荐

