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

Flutter中如何为firebase_storage实现文件上传进度监听?

在Flutter中监听Firebase Storage上传进度

嘿,刚好我对这块熟得很!其实firebase_storage官方已经给咱们封装了进度监听的能力,不用自己去实现什么OnProgressListener,直接用它内置的API就能搞定,下面给你一步步讲清楚:

核心思路:利用UploadTask的snapshotEvents流

当你调用putFile/putData上传文件时,会得到一个UploadTask对象,这个对象的snapshotEvents是一个Stream,它会实时推送上传的快照信息,里面就包含了进度数据。

完整代码示例

咱们直接上可运行的代码片段,一看就懂:

import 'dart:io';
import 'package:firebase_storage/firebase_storage.dart';

// 定义一个上传文件并监听进度的函数
Future<void> uploadFileWithProgress(File file) async {
  // 1. 获取Firebase Storage的引用(这里替换成你的存储路径)
  final storageRef = FirebaseStorage.instance.ref().child('uploads/${file.path.split('/').last}');

  // 2. 创建上传任务
  final uploadTask = storageRef.putFile(file);

  // 3. 监听上传进度和状态
  final subscription = uploadTask.snapshotEvents.listen((TaskSnapshot snapshot) {
    // 计算上传进度百分比
    final progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
    print('上传进度:${progress.toStringAsFixed(2)}%');

    // 根据上传状态做不同处理
    switch (snapshot.state) {
      case TaskState.running:
        // 正在上传,这里可以更新UI进度条
        break;
      case TaskState.paused:
        // 上传暂停了
        print('上传已暂停');
        break;
      case TaskState.success:
        // 上传成功,获取文件下载URL
        snapshot.ref.getDownloadURL().then((url) {
          print('文件上传完成,下载URL:$url');
        });
        break;
      case TaskState.canceled:
        // 上传被取消
        print('上传已取消');
        break;
      case TaskState.error:
        // 上传出错
        print('上传失败:${snapshot.error}');
        break;
    }
  }, onError: (error) {
    // 处理全局上传错误
    print('上传发生错误:$error');
  });

  // 如果你需要手动取消监听,可以调用subscription.cancel();
  // 比如在页面销毁时记得取消,避免内存泄漏
}

关键细节说明

  • 进度计算:snapshot.bytesTransferred是已经上传的字节数,snapshot.totalBytes是文件总字节数,两者相除再乘100就是百分比。
  • 状态处理:TaskState枚举包含了所有可能的上传状态,你可以根据这些状态更新UI(比如显示进度条、成功提示、错误弹窗)。
  • 暂停/恢复/取消任务:UploadTask还提供了pause()、resume()、cancel()方法,你可以绑定到按钮点击事件上,实现手动控制上传。

额外提示

如果你是用putData上传内存中的数据(比如Uint8List),用法和putFile完全一样,同样通过snapshotEvents监听进度。

内容的提问来源于stack exchange,提问作者Jus10

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:14:11