我有一个
List<String> profileName = ['k1','k2','k3','k4','k5',];
我想一一下载一个 profileName,然后使用 final downloadedImagesUrl = [];
将其添加到 downloadedImagesUrl.add(snapshot.data!);
,例如我们要从 firebase 存储下载 k1,然后将下载的 url 传递到 final downloadedImagesUrl = [];
然后下载k2并将下载的url传递给final downloadedImagesUrl = [];
一步一步等等。我怎样才能实现这样的目标。
代码:
final FirebaseStorage storage = FirebaseStorage.instance;
List<String> profileName = ['k1','k2','k3','k4','k5',];
final downloadedImagesUrl = [];
FutureBuilder(
future: storage.ref('usersProfile/$profileName').getDownloadURL(),
builder: (context,snapshot) {
if (snapshot.connectionState == ConnectionState.done
&&snapshot.hasData) {
//problem
downloadedImagesUrl.add(snapshot.data!);
return Image.network(snapshot.data!);
}
return Container();
}),
这段代码的问题在于 downloadImagesUrl.add(snapshot.data!);就是随机添加下载的图片profileName url到最终的downloadedImagesUrl = [];我不希望这种情况发生如果有人知道请帮忙......
我认为你只需要一个简单的函数来做到这一点,我还没有测试你的代码实现,但我认为你应该这样做
Future<List<String>> getDownloaedImageUrls() async {
List<String> profileNames = [
'k1',
'k2',
'k3',
'k4',
'k5',
];
List<String> downloadedImagesUrl = [];
for (var profileName in profileNames) {
String imageUrl =
await storage.ref('usersProfile/$profileName').getDownloadURL();
downloadedImagesUrl.add(imageUrl);
}
return downloadedImagesUrl;
}
在您的未来建造者上使用它
FutureBuilder(
future: getDownloaedImageUrls(),
builder: (context,snapshot) {
if (snapshot.connectionState == ConnectionState.done
&&snapshot.hasData) {
//since the function will also return the array of image url then we just use the first image url here
return Image.network(snapshot.data[0]!);
}
return Container();
}),
希望有帮助