Flutter图片上传Firebase数据库异常:仅加VSCode断点后才更新
问题解决:Firebase Storage上传后数据库无法同步更新
问题根源在于你调用putFile时没有添加await,导致代码不等待图片上传完成就直接执行后续的获取下载链接和数据库更新操作。此时文件还未上传成功,getDownloadURL()无法拿到有效链接,数据库自然无法同步更新;而添加断点相当于给了上传操作足够的完成时间,所以数据库能正常更新。
修改后的代码
- 给
putFile添加await,确保文件上传完成后再执行后续逻辑:
Future<void> uploadCoverPic() async { ImagePicker imagePicker = ImagePicker(); XFile? file = await imagePicker.pickImage(source: ImageSource.camera); print('${file?.path}'); String uniqueFileName = DateTime.now().microsecondsSinceEpoch.toString(); Reference referenceDirImages = storageRef.child('usersCoverPics'); Reference refImagetoupload = referenceDirImages.child(uniqueFileName); try { // 等待文件上传完成 await refImagetoupload.putFile(File(file!.path)); _x = await refImagetoupload.getDownloadURL(); UserModel user = UserModel(id: widget.user.id, coverImage: _x); FirebaseServices.updateCoverPic(user); } catch (error) { // 建议添加错误打印,方便排查问题 print('上传或更新出错: $error'); } }
- 检查数据库更新方法的字段匹配:
你创建UserModel时传入的是coverImage,但updateProfilePic方法里更新的是profilePicture字段,这大概率是笔误,需要修改为对应字段:
static void updateCoverPic(UserModel user) { userRef.doc(user.id).update({'coverImage': user.coverImage}); }
内容的提问来源于stack exchange,提问作者and waojd
相关产品推荐
相关产品推荐

