当FirebaseImage在Flutter中返回null时,返回一个占位符图像

时间:2020-10-05 21:59:13

标签: firebase flutter firebase-storage

我正在使用Firebase Image Provider

显示Firebase Storage中的图像

如果实际上有照片,那将是一个折腾,如果没有,我想返回一个占位符。如果原始的FirebaseImage为null,我似乎无法弄清楚如何返回占位符。

使用get或其他引用可确保每次迭代都读取和/或下载,因此我尝试首先使用Image Provider的缓存功能进行引用...但是我找不到任何有关如何处理的文档这种null的返回值...似乎有所不同,因为下面的代码无法正常工作。

can't get detail_name of undefined

控制台中的错误是这样的:

抛出了以下PlatformException来解析图像编解码器: PlatformException(错误-13010,FIRStorageErrorDomain,对象location / reference.jpg不存在。,空)

如果有图像,代码可以正常工作。如果占位符值为主要值,则代码可以正常工作。

1 个答案:

答案 0 :(得分:0)

我以这种方式将FutureBuilder与getMetaData结合使用,这似乎可以解决问题。但是,我愿意在这里提出更好的想法和建议。

      Center(
            child: FutureBuilder<dynamic>(
                future: getCardImage(facility: facility, pictureID: id),
                builder: (context, AsyncSnapshot<dynamic> snapshot) {
                  if (snapshot.hasData) {
                    return CircleAvatar(
                      radius: avatarRadius,
                      backgroundColor: Colors.grey.shade400,
                      backgroundImage: FirebaseImage(
                        'gs://location/$images/$reference.jpg',
                        shouldCache: true,
                      ),
                    );
                  } else {
                    return CircleAvatar(
                        radius: avatarRadius,
                        backgroundColor: Colors.grey.shade400,
                        child: Image.asset(
                          'assets/images/some_other_photo.png',
                          color: Colors.grey.shade700,
                          width: imageSize,
                        ));
                  }
                }),
          ),

此功能查找metaData,据我所知,它是使用Firebase进行读取的另一类,它可以使用缓存功能保存常规读取和数据传输。 (如果我错了,请纠正我)。

 Future getCardImage({String facility, String pictureID}) async {
return await FirebaseStorage.instance
    .ref()
    .child('images')
    .child('$facility')
    .child('$pictureID.jpg')
    .getMetadata();

}