firebase - 我必须从 Firebase 下载图像才能显示它吗?
问题描述
我正在使用 Flutter 和 Firebase。我已经设法使用这样的方案将用户个人资料照片上传到 Firebase 存储:
用户/userid.png
到目前为止,每当我需要显示用户头像时,我都必须先将其下载到本地;喜欢
final String fileName = uid + ".png";
Directory appDocDir = await getTemporaryDirectory();
String appDocPath = appDocDir.path;
final File file = File('$appDocPath/$fileName');
// clears the file
file.writeAsStringSync("");
final StorageReference ref = FirebaseStorage.instance.ref().child('users/' + fileName);
final StorageFileDownloadTask downloadTask = ref.writeToFile(file);
final int byteNumber = (await downloadTask.future).totalByteCount;
print("byteNumber : ${byteNumber}");
} catch(e) {
return null;
}
但是,我想知道我是否可以跳过这一步而只使用 NetworkImage() 函数,例如:
final StorageReference ref = FirebaseStorage.instance.ref().child('users/' + user.uid + ".png");
String downloadURL = await ref.getDownloadURL();
downloadURL = Uri.decodeFull(downloadURL.toString());
print("FB Storage URL: $downloadURL");
return new NetworkImage(downloadURL);
它不起作用并引发异常。
我想做的事;可能吗?
解决方案
您要显示的图像的数据始终必须读入您要在其中显示的应用程序。但您不必像现在这样自己处理下载。
Firebase 存储中的任何文件都有一个所谓的下载 URL。拥有此 URL 的任何人都可以读取该文件,而无需使用 Firebase Storage SDK。这几乎就是大多数来自互联网的图像的样子,所以有很多库可以处理这样的图像 URL。
例如,Flutter 食谱有一个关于显示来自互联网的图像的部分,它表明该Image
小部件可以显示来自 URL 的图像,如下所示:
Image.network(
'https://raw.githubusercontent.com/flutter/website/master/_includes/code/layout/lakes/images/lake.jpg',
)
如果这使用来自 Github 的图像,您还可以使用来自 Firebase 存储的下载 URL。
大多数应用程序在上传文件时会将文件的下载 URL 存储在其数据库中。如果您没有下载 URL,而只有路径,则可以通过以下方式获取下载 URL:
final StorageReference ref = FirebaseStorage.instance.ref().child('users/' + fileName);
final Uri downloadUrl = await ref.getDownloadUrl();
我不是 Flutter 专家,因此该代码段中可能存在一些问题。
推荐阅读
- python - 全局语句无法按预期工作,无法在类中访问
- android - 片段中的 Android Kotlin RecyclerView 不起作用
- javascript - onRequest 与 onCall 返回 null
- git - 如何按文件类型过滤 repo 的拉取
- python - Leap Motion Controller - 不连接 cpp、python (mac)
- python - 为什么增加 nn.Linear 输入特征的大小会提高 CNN 模型的准确性?
- java - SpringBatch-如何将文件本身作为项目处理?
- c# - 将模型类作为泛型类型参数传递
- calc - 在 Libre Office Calc 中,当右侧边缘无法向内拖动时,如何调整列宽?
- python - 如何将列表转换为字典?