我正在从任何类型的网站上抓取一些图像。我需要计算他们的Size
。为此,我发现适用于大多数情况的function
:
Future<Size> calculateImageDimension(String imageUrl) {
Completer<Size> completer = Completer();
late Image image;
image = Image.network(
imageUrl,
);
image.image.resolve(const ImageConfiguration()).addListener(
ImageStreamListener(
(ImageInfo image, bool synchronousCall) {
var myImage = image.image;
Size size = Size(myImage.width.toDouble(), myImage.height.toDouble());
if (!completer.isCompleted) {
completer.complete(size);
}
},
),
);
return completer.future;
}
问题:
的上述功能失败
异常:图像数据无效
使用此imageUrl
:调用它时
https://static.zara.net/photos///contents/cm/media-transformations/joinlife-ctx/joinlife-large.svg?ts=1611919362013
这里有什么问题?我也不能catch
和Exeption
。。。
我发现了这个相关的问题。但这对我也没有帮助。
我在Git上发现了这个问题,它对我来说很好。与其说是解决方案,不如说是一种变通方法:
Future<bool> hasValidImageData(String url,BuildContext context) async {
bool hasNoError=true;
var output=Completer<bool>();
precacheImage(
NetworkImage(url),
context,
onError: (e,stackTrace)=>hasNoError=false,
).then((_)=>output.complete(hasNoError));
return output.future;
}
它利用了CCD_ 7附带的CCD_。缺点是它需要BuildContext
,但正如我所说,它对我有效,也是我找到的唯一解决方法。