Flutter中无法捕获Firebase Storage权限拒绝异常求助
解决Firebase Storage上传权限异常无法捕获的问题
你的代码无法捕获异常的核心原因是:仅创建了UploadTask但未等待上传任务完成。putData返回的是一个异步任务对象,代码直接执行return true,没有等待上传操作完成,因此上传过程中抛出的异常不会进入当前的try/catch块,只会在后台输出错误日志。
修复后的代码
Future<bool> uploadDataToStorage(String user, String jsonData) async { try { final now = DateTime.now(); final formatter = DateFormat.yMMMMd().add_jm(); final formattedDateTime = formatter.format(now); final storage = FirebaseStorage.instance; final Reference storageRef = storage.ref().child('backup/${user}_backup.json'); FirebaseStorage.instance.setMaxUploadRetryTime(Duration(seconds: 2)); Uint8List data = Uint8List.fromList(utf8.encode(jsonData)); final UploadTask uploadTask = storageRef.putData(data); // 等待上传任务完成,异常会在此处被抛出并捕获 await uploadTask; return true; } catch (error) { print('Data upload error: $error'); return false; } }
补充说明
如果需要获取上传结果(如下载URL),可以进一步处理TaskSnapshot:
final TaskSnapshot snapshot = await uploadTask; final String downloadUrl = await snapshot.ref.getDownloadURL(); // 处理下载URL
这样修改后,上传过程中包括权限拒绝在内的异常都会被try/catch块捕获,你可以在catch分支中处理错误逻辑。
内容的提问来源于stack exchange,提问作者1210saad
相关产品推荐
相关产品推荐

