Dart如何利用上传完成回调按顺序上传文件列表中的所有文件
文件按顺序依次上传实现方案
方案1:递归回调实现(无额外语法依赖)
通过索引标记当前上传进度,每次单文件上传完成后触发下一个文件的上传,直到全部处理完毕。
// 待上传文件列表 List<File> _list; // 记录当前上传的文件索引 int _currentIndex = 0; void startBatchUpload() { // 所有文件上传完成的终止条件 if (_currentIndex >= _list.length) { // 此处可添加全部上传完成后的业务逻辑 print("所有文件上传完毕"); return; } // 上传当前索引对应的文件 upload(_list[_currentIndex], () { // 当前文件上传完成,索引自增后递归调用上传下一个 _currentIndex++; startBatchUpload(); }); } // 调用入口直接执行 startBatchUpload() 即可启动顺序上传
方案2:Future 封装实现(适配 async/await 语法,代码更易维护)
如果开发环境支持 Dart 异步语法,可以先把回调式的上传方法封装为 Future 类型,再通过循环顺序等待每个文件上传完成。
// 封装回调式upload为返回Future的方法 Future<void> uploadSingleFile(File file) { final completer = Completer<void>(); upload(file, () => completer.complete()); return completer.future; } // 批量顺序上传逻辑 Future<void> batchUpload() async { for (final file in _list) { // 等待当前文件上传完成后才会进入下一轮循环 await uploadSingleFile(file); } // 此处可添加全部上传完成后的业务逻辑 print("所有文件上传完毕"); } // 调用入口执行 batchUpload() 即可
扩展说明
- 如果需要处理上传失败场景,可在上传回调中增加错误判断,若失败可选择终止流程或者跳过当前文件继续上传后续文件
- 若需要展示单个文件/整体上传进度,可在上传回调中对应位置增加状态更新逻辑即可
内容的提问来源于stack exchange,提问作者Brandon Pillay
相关产品推荐
相关产品推荐

