我看过一些人在网上写的有关能够做到这一点的文章,但是他们只告诉您如何使用特定的受控图像列表来做到这一点,他们还事先知道所有文件名。
这里还有一个“答案”发布在Flutter - Get all images from firebase storage上,它实际上并不能解决所有问题,因为它建议使用推荐插件的.listAll()方法,但是没有.listAll这样的方法。 ()使用建议的插件。
我需要不知道Firebase存储中有多少个图像,或者它们可能被称为什么,只是要返回存储在其中的所有图像。
更新:
因此,由于Firebase充满了太多限制,以至于几乎没有资格作为数据库,因此似乎我们可能必须将图像保留在Firebase存储中,并将这些图像的引用列表保留在Firebase实时数据库文档中。
但是,我仍然坚持这样做的实际实现,因为我什至首先不确定如何最好地做到这一点。我正在尝试将所有存储映像URL存储在一个数组中(如果这不是最好的方法,请告诉我!):
Firebase Structure
collection -> document -> fields
userData profileImages URLs (array)
我的第一个问题是我不知道如何将新数据追加到现有数组中,似乎每次添加新项时都会覆盖它,因此数据库中的数组中只有一个字符串:
Firestore.instance.collection('userData').document('profileImages').updateData({
'URLs': _uploadedFileURL,
});
然后,在此之后,我也不确定如何在以后需要时实际检索全部数据:
Container(
child: StreamBuilder(
stream: Firestore.instance.collection('userData').document('profileImages').snapshots(),
builder: (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
if (!snapshot.hasData) {
return LoadingAnimationBasic();
}
if (snapshot.data.data == null) {
return LoadingAnimationBasic();
} else {
return ListView(
shrinkWrap: true,
children: _buildProfileGallery(snapshot),
);
}
},
),
),
然后是功能:
_buildProfileGallery(AsyncSnapshot<DocumentSnapshot> snapshot) {
int test = snapshot.data["URLs"].length;
print('URLs in List: ' + test.toString());
return snapshot.data.data.map(???);
}
我不知道该映射的参数是什么,因为提示文本很疯狂:
MapEntry(K2, V2> f(String key, V value)
我什至无法开始猜测这是什么意思。
我走对了吗?我在正确的星球上吗?
答案 0 :(得分:0)
去年,Firebase的Android,iOS和JavaScript客户端SDK已添加了列出文件的功能,但尚未加入FlutterFire绑定。
您链接的问题的answer指向FlutterFire开源项目中的一个pull request,该项目添加了此功能。因此,尽管有人也编写了允许在Flutter中列出文件的代码,但到目前为止该代码尚未添加到发行版中。因此,现在使用该代码的唯一方法是为firebase_storage
构建自己的FlutterFire库版本。
如果无法在Firebase Storage API中列出文件,则必须恢复到每个人在添加此功能之前所做的工作:将文件列表保留在辅助位置,例如Firebase Realtime Database或Cloud Firestore。