在带有 Flutter 的 StreamBuilder 中使用额外的 Future

Using an additional Future inside of a StreamBuilder with Flutter

我正在尝试动态拉取网站图标并将它们作为前导图标放置在构成 ListView 的 ListTiles 中,它全部包含在 StreamBuilder 中。 StreamBuilder 'stream' 变量是一个 FirebaseFirestore 实例,如下所示:

streamBuilder = StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance.collection('users').doc(snapshot.data.uid).collection('vault').snapshots(),
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> querySnapShot){

因此每次更新快照时都会更新流。快照包含文档,这些文档在 for 循环中迭代以填充列表视图中的每个列表块。每个文档包含一个 url。我需要使用 'url' 来检索 Listtile 各自的图标图标。

import 'package:favicon/favicon.dart' as iconz;

for (var doc in querySnapShot.data.docs) {
   String urlIcon = doc['urlIcon'];
   iconUse = iconz.Favicon.getBest(urlIcon);
leading: iconUse,
title:...

问题是 getBest() 函数 returns 是一个未来。即 在 StreamBuilder 中不允许对我的收藏夹 getBest() 函数使用 'await',并且我的 StreamBuilder 已经依赖于快照流。如何在已经依赖于不同流的 StreamBuilder 中使用额外的 Future?

您可以为 leading: iconUse

使用 FutureBuilder
import 'package:favicon/favicon.dart' as iconz;

for (var doc in querySnapShot.data.docs) {
   String urlIcon = doc['urlIcon'];
   //iconUse = iconz.Favicon.getBest(urlIcon);
   leading: FutureBuilder(
   future: iconz.Favicon.getBest(urlIcon),
   builder: (context, snapshot2) {
      if (snapshot2.hasData) {
          return snapshot2.data; //or whatever object you want to return from your function.
      } 
    ),

 title:...