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
相关产品推荐
相关产品推荐

