Firebase 颤振/火基-创建用于收集火基图像的未来功能

Firebase 颤振/火基-创建用于收集火基图像的未来功能,firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,我试图显示从firestore下载的一些图像,但当我加载此屏幕时,下载图像需要一些时间。为了使这一点更加无缝,我正在考虑创建一个未来的功能,允许我先下载图像,然后一次显示所有图像。我已经创建了一个从Firebase获取数据的未来函数,但现在需要创建一个新函数来下载图像。以下是我未来的两项职能: Future getCardData() async { return await Firestore.instance.collection('cards') .where('

我试图显示从firestore下载的一些图像,但当我加载此屏幕时,下载图像需要一些时间。为了使这一点更加无缝,我正在考虑创建一个未来的功能,允许我先下载图像,然后一次显示所有图像。我已经创建了一个从Firebase获取数据的未来函数,但现在需要创建一个新函数来下载图像。以下是我未来的两项职能:

     Future getCardData() async {
    return await Firestore.instance.collection('cards')
    .where('Event', isEqualTo: widget.documentid).getDocuments();
  }

  Future getCardImage(int index) async {
    final _data = getCardData();
    return await FirebaseImage(_data.data.documents[index].data['img_url'], maxSizeBytes: 15 * 1024 * 1024);
  }
然后我会这样实施:

  body: FutureBuilder(
    future: getCardData(),
    builder: (context, snapshot)  {
      if (!snapshot.hasData) {
        return Center(child: const Text('Loading...'));
      }
      return GridView.builder(
        shrinkWrap: true,
        gridDelegate:
        SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2),
        itemCount: snapshot.data.documents.length,
        itemBuilder:
        // ignore: missing_return
            (BuildContext context, int index) {
          print(snapshot.data.documents[index].data['img_url']);
          return Padding(
            padding: const EdgeInsets.all(8.0),
            child: Container(
              color: Colors.blue,
              height: MediaQuery.of(context).size.height / 6,
              child: Center(
                  child: Card(
                    elevation: 8.0,
                    child: getCardImage(index);
                    ),
                  )
              ),
            ),
          );
        },
      );
    },
  ),
但我不确定创建未来下载图像的函数的最佳方法,因为当我运行上述操作时,会出现以下错误:

The argument type 'Future<dynamic>' can't be assigned to the parameter type 'ImageProvider<dynamic>'
无法将参数类型“Future”分配给参数类型“ImageProvider”
有什么建议吗


谢谢

这能帮你达到目的吗

     Future<FirebaseImage> getCardImage(int index) async {
final _data = getCardData();
return await FirebaseImage(_data.data.documents[index].data['img_url'], maxSizeBytes: 15 * 1024 * 1024);
Future-getCardImage(int-index)异步{
最终数据=getCardData();
return wait wait firebasemage(_data.data.documents[index].data['img_url'],maxSizeBytes:15*1024*1024);

}

您需要什么还不是很清楚。你的未来到底在哪里?当我运行上面的程序时,我得到了以下错误:参数类型“future”无法分配给参数类型“ImageProvider”,我将调整我的问题以尝试使需要更加清楚谢谢触发此错误的行是什么?看起来在呈现itI之前,您必须将数据转换为另一种格式:child:getCardImage(index);由于这返回了一个未来,而不是一个ImageProvider正在标记错误,我也这么认为,但奇怪的是它要求一个
ImageProvider
。它应该在那里期待一个
小部件
。。。如果用
Text('test')
替换它,它是否有效?