Firebase returns 空照片网址

Firebase returns null photoUrl

我正在构建一个模拟社交媒体应用程序,允许用户上传个人资料图片以创建他们的个人资料。我正在 flutter 中构建这个应用程序。 现在,这是我的 uploadPic 方法:

Future uploadPic(BuildContext context) async{

    String fileName = basename(_image.path);
    FirebaseStorage storage = FirebaseStorage.instance;
    var photoUrl;

    Reference ref = storage.ref().child(fileName);
    var storedImage = File(_image.path);
    UploadTask uploadTask = ref.putFile(storedImage);
    uploadTask.then((res) {
      photoUrl = res.ref.getDownloadURL();
    });


    print("photo url -- $photoUrl");
    await widget.user?.updatePhotoURL(photoUrl);
    await FirebaseAuth.instance.currentUser?.updatePhotoURL(photoUrl);
  }

我在我的 firebase 控制台中添加了正确的权限以允许读取和写入数据库。我知道这一点是因为当我检查 firebase 存储时,我看到图片已成功上传。 但是,当我尝试打印返回的照片时 url(上传任务完成后),我得到一个空值。当我尝试在应用程序的其他区域访问照片时,这是一个问题,因为 firebase 中的用户 photoUrl 为 null。

关于将图片上传到 firebase,我做错了什么吗? 另外,我的终端 returns 是这样的:没有请求的 App Check 令牌。。我想知道这是否与问题有关?

如有任何帮助,我们将不胜感激!

你的问题很简单,就在这里:

var photoUrl;
uploadTask.then((res) {
   photoUrl = res.ref.getDownloadURL();
});
print(photoUrl); // null

问题是您正在尝试打印 photoUrl 变量而不等待未来 uploadTask 完成其结果 null.

解决方案是在打印 photoUrl 变量之前等待 uploadTask 未来:

var photoUrl;
await uploadTask.then((res) async {
   photoUrl = await res.ref.getDownloadURL();
});
print(photoUrl);

你的代码的解决方案:

Future uploadPic(BuildContext context) async{

    String fileName = basename(_image.path);
    FirebaseStorage storage = FirebaseStorage.instance;
    var photoUrl;

    Reference ref = storage.ref().child(fileName);
    var storedImage = File(_image.path);
    UploadTask uploadTask = ref.putFile(storedImage);
    await uploadTask.then((res) async {
       photoUrl = await res.ref.getDownloadURL();
    });


    print("photo url -- $photoUrl");
    await widget.user?.updatePhotoURL(photoUrl);
    await FirebaseAuth.instance.currentUser?.updatePhotoURL(photoUrl);
  }