Flutter 根据类型显示svg或网络图像

Flutter 根据类型显示svg或网络图像,flutter,flutter-layout,flutter-dependencies,Flutter,Flutter Layout,Flutter Dependencies,您好,我使用的是一个向我发送图像的服务,有时是png或jpeg图像,我使用的是颤振小部件Image。另一方面,有时会通过intuit向我发送svg图像,我可以使用flatter\u svg包,但我不知道如何根据图像类型在这些小部件之间切换 url上没有我可以用来确定图像类型的内容 我怎么能做到 更新:来自服务器的响应示例,映像位于属性lexeme\u映像上 { "has_tts": true, "word": "one",

您好,我使用的是一个向我发送图像的服务,有时是png或jpeg图像,我使用的是颤振小部件
Image
。另一方面,有时会通过intuit向我发送svg图像,我可以使用
flatter\u svg
包,但我不知道如何根据图像类型在这些小部件之间切换

url上没有我可以用来确定图像类型的内容

我怎么能做到

更新:来自服务器的响应示例,映像位于属性lexeme\u映像上

{
  "has_tts": true,
  "word": "one",
  "language_information": {},
  "from_language_name": "Spanish",
  "tts": "https://d1vq87e9lcf771.cloudfront.net/joeyn/b53723d682be1114be1cefce3ddbb908",
  "infinitive": null,
  "learning_language": "en",
  "translations": "un, una, uno",
  "learning_language_name": "English",
  "pos": "Numeral",
  "lexeme_image": "https://d2pur3iezf4d1j.cloudfront.net/images/4be10d03a4c6ac4078b6be0df2eb5247",
  "from_language": "es",
  "is_generic": false,
  "lexeme_id": "dd0309fb9cf34f8a2b2e029889c26ec5",
  "related_lexemes": [],
  "canonical_path": "/dictionary/English/one/d3a447831e3322e78309fa3a161c0ebf"
}

不要使用
图像
小部件提供的
.network
构造函数,而是使用如下所示的网络请求检索图像文件:

HttpClient().getUrl(Uri.parse(STRING URL HERE))
    .then((HttpClientRequest request) => request.close())
    .then((HttpClientResponse response) => 
        response.pipe(File('foo').openWrite()));
或者使用
wait
的更好示例:

HttpClientRequest request = await HttpClient().getUrl(Uri.parse(STRING URL HERE));
HttpClientResponse response = await request.close();

File file = File('foo');
await response.pipe(file .openWrite());
然后使用
图像库
PngDecoder
JpegDecoder
解码器类
isValidFile
方法,可以检查图像是png还是jpeg。例如:

PngDecoder png = PngDecoder();
JpegDecoder jpg = JpegDecoder();

if(png.isValidFile(file) || jpg.isValidFile(file)) {
  //use `Image.file(file)`
}
else {
  //use `SvgPicture.file(file)`
}

如果是其中之一,则可以将检索到的文件传递给
Image.file
构造函数。如果不是,则使用
SvgPicture.file
构造函数。

您从“服务”接收的数据类型是什么?你能详细说明一下,或者展示一些检索代码吗?@Christophermore我用服务器响应的例子更新了这个问题。