如果实际上有照片,那将是一个折腾,如果没有,我想返回一个占位符。如果原始的FirebaseImage为null,我似乎无法弄清楚如何返回占位符。
使用get或其他引用可确保每次迭代都读取和/或下载,因此我尝试首先使用Image Provider的缓存功能进行引用...但是我找不到任何有关如何处理的文档这种null的返回值...似乎有所不同,因为下面的代码无法正常工作。
can't get detail_name of undefined
控制台中的错误是这样的:
抛出了以下PlatformException来解析图像编解码器: PlatformException(错误-13010,FIRStorageErrorDomain,对象location / reference.jpg不存在。,空)
如果有图像,代码可以正常工作。如果占位符值为主要值,则代码可以正常工作。
答案 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();
}