You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:06:03