Показать svg или изображение из сети в зависимости от типа flutter - PullRequest
0 голосов
/ 10 июля 2020

Привет, я использую службу, которая отправляет мне изображения, иногда изображения в формате PNG или JPEG, и я использую виджет flutter Image. С другой стороны, иногда присылайте мне изображения svg intuit case, я могу использовать пакет flutter_svg, но я не знаю, как переключаться между этими виджетами в зависимости от типа изображения.

На экране ничего нет. URL-адрес, который я могу использовать для определения типа изображения.

Как я могу это сделать?

ОБНОВЛЕНИЕ: Пример ответа от сервера, изображение находится в свойстве lexeme_image

{
  "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"
}

1 Ответ

0 голосов
/ 10 июля 2020

Вместо использования конструкторов .network, предоставляемых виджетами Image, получите файл Image с помощью сетевого запроса, как показано ниже:

HttpClient().getUrl(Uri.parse(STRING URL HERE))
    .then((HttpClientRequest request) => request.close())
    .then((HttpClientResponse response) => 
        response.pipe(File('foo').openWrite()));

или лучший пример с использованием await:

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

File file = File('foo');
await response.pipe(file .openWrite());

Затем, используя image library s 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...