futurebuilder 在初始化之前运行

问题描述 投票:0回答:1

我的 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 是不可迭代的。

flutter firebase firebase-storage
1个回答
0
投票

直接将

Future
方法分配给
FutureBuilder

FutureBuilder(
   future: imageGetter(),
   builder: (context, snapshot) {
       ...
        }
)

那是因为那行:

photoUlr = imageGetter();

变量

photoUrl
怀疑是否成功初始化。

© www.soinside.com 2019 - 2024. All rights reserved.