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

Flutter中如何捕获Firebase Storage的所有不同类型错误?

Flutter firebase_storage 错误规范捕获方案

你需要的类型化错误捕获能力,firebase_storage 2.0.0及以上稳定版本已经原生支持,无需硬编码错误字符串,实现方式如下:

前置要求

确保项目依赖的firebase_storage版本 >= 2.0.0,旧版本需先升级到官方稳定版。

方案1:监听上传任务状态(适合需要实时进度反馈的场景)

通过监听UploadTask的状态流,可以直接用TaskState枚举匹配所有任务状态,错误场景下用官方预定义的FirebaseStorageError常量匹配错误类型:

final UploadTask task = FirebaseStorage.instance.ref("目标存储路径").putFile(本地文件对象);

task.snapshotEvents.listen((TaskSnapshot snapshot) {
  switch (snapshot.state) {
    case TaskState.running:
      // 上传中:可更新进度条
      double progress = snapshot.bytesTransferred / snapshot.totalBytes;
      break;
    case TaskState.paused:
      // 上传已暂停
      break;
    case TaskState.success:
      // 上传成功:可获取下载链接
      String downloadUrl = await snapshot.ref.getDownloadURL();
      break;
    case TaskState.canceled:
      // 上传已取消
      break;
    case TaskState.error:
      // 上传出错:细分错误类型
      final FirebaseException err = snapshot.error as FirebaseException;
      if (err.code == FirebaseStorageError.unauthenticated) {
        // 用户未登录/无上传权限
      } else if (err.code == FirebaseStorageError.quotaExceeded) {
        // 存储空间已满
      } else if (err.code == FirebaseStorageError.objectNotFound) {
        // 目标存储对象不存在
      }
      break;
  }
});

方案2:async/await + try-catch(适合不需要实时进度的场景)

直接捕获FirebaseStorageException,结合FirebaseStorageError常量做类型匹配:

try {
  TaskSnapshot snapshot = await FirebaseStorage.instance.ref("目标存储路径").putFile(本地文件对象);
  String downloadUrl = await snapshot.ref.getDownloadURL();
  // 上传成功后续逻辑
} on FirebaseStorageException catch (e) {
  switch (e.code) {
    case FirebaseStorageError.canceled:
      // 处理上传取消逻辑
      break;
    case FirebaseStorageError.retryLimitExceeded:
      // 处理重试次数超限逻辑
      break;
    case FirebaseStorageError.unknown:
      // 处理未知错误逻辑
      break;
    // 按需补充其他错误类型的处理分支
  }
}

说明

FirebaseStorageError是官方SDK提供的错误码常量类,所有可能的错误码都被封装为静态字符串常量,会跟随SDK版本同步更新,完全避免了硬编码字符串可能出现的版本不兼容问题。如果需要查看全量支持的错误类型,可以直接查看SDK内FirebaseStorageError类的定义,每个常量都对应了明确的错误场景注释。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:27:02