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);
}
我正在构建一个模拟社交媒体应用程序,允许用户上传个人资料图片以创建他们的个人资料。我正在 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);
}