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

Flutter新版Firebase Storage监听上传进度报STATE_CHANGED未定义错误

解决Firebase Storage上传进度监听报错问题

原因分析

这个错误是因为firebase_storage新版本对UploadTask的事件监听API做了调整,旧版的snapshotEvents相关实现被修改,直接沿用旧写法会找不到STATE_CHANGED属性。

修复方案

1. 同步更新依赖版本

确保firebase_storage及核心Firebase依赖使用最新稳定版,修改pubspec.yaml:

firebase_storage: ^11.0.0  # 替换为当前最新稳定版
firebase_core: ^2.0.0       # 保持核心依赖版本同步

执行flutter pub get完成依赖更新。

2. 调整监听代码适配新版API

新版firebase_storage中,UploadTask的事件监听逻辑需要对应调整,替换旧写法:
旧代码(报错写法):

task.snapshotEvents.listen((event) {
  // 原进度处理逻辑
});

新代码(适配新版):

task.snapshotEvents.listen((TaskSnapshot snapshot) {
  // 计算上传进度
  double progress = snapshot.bytesTransferred / snapshot.totalBytes;
  print('上传进度:${(progress * 100).toStringAsFixed(2)}%');
  
  // 根据状态处理不同逻辑
  switch (snapshot.state) {
    case TaskState.running:
      // 上传中逻辑
      break;
    case TaskState.paused:
      // 暂停逻辑
      break;
    case TaskState.success:
      // 上传完成后获取下载链接
      snapshot.ref.getDownloadURL().then((url) {
        print('下载链接:$url');
      });
      break;
    case TaskState.canceled:
      // 取消逻辑
      break;
    case TaskState.error:
      // 错误处理逻辑
      break;
  }
});

3. 确认UploadTask实例有效性

检查创建UploadTask的代码,确保文件字节、存储路径等参数正确传入,避免生成无效的任务实例:

// 正确创建UploadTask示例
final storageRef = FirebaseStorage.instance.ref().child('uploads/$fileName');
final UploadTask task = storageRef.putData(fileBytes);

额外注意事项

  • 确保main函数中已完成Firebase初始化:await Firebase.initializeApp();
  • 检查设备网络连接,避免因网络异常导致任务初始化失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:09:23