在我的应用程序中,我想使用资产文件中的SVG图像。但是我想在app中检查它们,如果图像资源与服务器上的图像网络不同,我会下载图像网络并将其替换到我的图像资源中,并再次从资产中读取以显示它们。我怎么能做到呢?
bool showSvg = false;
void compareSvg(){
if(value['svgimage']['name'] != Image.profileSvg){
// how download svg network and replace it to assetfile
}else{
showSvg = true; });}
和我的代码示例:
showSvg
?SvgPicture.asset(Image.profileSvg)
:SvgPicture.asset(Image.newProfileSvg),
您不能比较图像(技术上可以,但它非常复杂的任务)和替换资产文件。您需要在第一次下载后缓存图像,并在下载图像之前将资产设置为占位符。看这里停靠
编辑:
好吧。我不知道你对svg的答案,但如果这是真的解决方案将这个用于文件缓存的pub添加到项目中。下面的代码可能会有所帮助:
File? _downloaded;
void _fetchImage() async {
const key = "profile";
const url =
"http://upload.wikimedia.org/wikipedia/commons/0/02/SVG_logo.svg";
final file = await DefaultCacheManager().getSingleFile(url, key: key);
setState(() {
_downloaded = file;
});
}
Widget _svgImageFetcher() {
_fetchImage();
Widget networkSvg;
if (_downloaded == null) {
networkSvg = SvgPicture.asset("assets/images/profile.svg");
} else {
networkSvg = SvgPicture.file(_downloaded!);
}
return Column(children: [Expanded(child: networkSvg)]);
}
只需将_svgImageFetcher() Widget放在想要显示图像的地方。并更改默认的svg图像和url。