我正在尝试循环遍历 Firestore 中传递到 Flutterflow 中的自定义操作的文档列表,并根据每个文档中包含的 photo_url 字段显示图像。我可以循环浏览并显示文档列表中的字符串,但图像是我遇到麻烦的地方。
我尝试按照“https://pub.dev/packages/pdf”上的“pdf”文档使用networkImage将图像包含在循环本身中,但遇到了异步/等待问题,因为它位于“构建”功能。因此,我在函数的开头放置了第二个循环,以填充稍后在构建函数的循环期间添加到 pdf 中的图像列表,但当我尝试使用 networkImage 时,该操作失败。
循环:
final doc_imgs = [];
for (final doc in docs) {
if (doc.photoUrl.isNotEmpty) {
final img = await networkImage(doc.photoUrl);
doc_imgs.add(img);
}
}
更新:经过进一步测试,networkImage 可以与其他 URL 一起使用,但不能与 Firestore 传递的 URL 一起使用。
您似乎在使用
networkImage
函数显示来自 Firestore URL 的图像时遇到了问题。由于您提到该函数适用于其他 URL,但不适用于从 Firestore 检索的 URL,因此您可以检查一些内容并尝试解决问题:
print(doc.photoUrl)
打印出 URL,看看是否有任何差异。[
{
"origin": ["*"],
"method": ["GET"],
"maxAgeSeconds": 3600
}
]
使用 Firebase CLI 进行部署:
gsutil cors set cors.json gs://your-bucket-name
build
中的异步处理:async
函数中使用 build
,您可以尝试使用 FutureBuilder 或类似技术来预获取图像。例如:
Future<Uint8List> fetchImage(String url) async {
final response = await http.get(Uri.parse(url));
return response.bodyBytes;
}
FutureBuilder<Uint8List>(
future: fetchImage(doc.photoUrl),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return Image.memory(snapshot.data);
} else {
return CircularProgressIndicator();
}
},
);
CachedNetworkImage
而不是 networkImage
,因为它可以处理缓存并提供更大的灵活性:
CachedNetworkImage(
imageUrl: doc.photoUrl,
placeholder: (context, url) => CircularProgressIndicator(),
errorWidget: (context, url, error) => Icon(Icons.error),
);