我的 Firebase 存储中有一个包含许多照片的文件夹。 我想获取分配给 photoUrl 的图像,这些图像是较晚的 Future 类,位于 initState 内部。
但是发生的情况是,futurebuilder 认为在初始化完成之前他们已经拥有了数据,并在 state.hasData 下运行代码。 请教我似乎是什么问题。
以下是我目前正在编写的代码
late Future photoUlr;
imageGetter() async {
final List<String> photoUrls = [];
final productTop = await FirebaseStorage.instance.ref().child("product").listAll();
productTop.items.forEach((Reference ref) async {
await ref.getDownloadURL().then((value) {
String val = value.toString();
print(val);
photoUrls.add(val);
});
});
return photoUrls;
}
@override
void initState() {
// TODO: implement initState
super.initState();
photoUlr = imageGetter();
}
///////////later in scaffold////////
FutureBuilder(
future: photoUlr,
builder: (context, snapshot) {
我相信上面的代码应该能够在initstate中初始化photoUlr。但正如我上面所说,futurebuilder 在初始化完成之前运行 snapshot.hasData 代码。我已经确认了这一点,因为 imageGetter 中的打印代码在 snapshot.hasData 的打印代码之后运行。
作为注释,我尝试使用下面的方法通过删除 imageGetter 函数中的等待来解决问题。
有什么方法可以在 flutter 中迭代 future
但是我无法解决这个问题,因为他们告诉我 Future 是不可迭代的。
直接将
Future
方法分配给 FutureBuilder
。
FutureBuilder(
future: imageGetter(),
builder: (context, snapshot) {
...
}
)
那是因为那行:
photoUlr = imageGetter();
变量
photoUrl
怀疑是否成功初始化。