Flutter - как преобразовать NetworkImage в ui.Image?

Мне нужно преобразовать NetworkImage в ui.Image. Я попытался использовать данное решение из этого вопроса с некоторыми настройками, но оно не работает.

Кто-нибудь может мне помочь?

 Uint8List yourVar;
 ui.Image image;
    final DecoderCallback callback =
        (Uint8List bytes, {int cacheWidth, int cacheHeight}) async {
      yourVar = bytes.buffer.asUint8List();
      var codec = await instantiateImageCodec(bytes,
          targetWidth: cacheWidth, targetHeight: cacheHeight);
      var frame = await codec.getNextFrame();
      image = frame.image;
      return image;
    };
    ImageProvider provider = NetworkImage(yourImageUrl);
    provider.obtainKey(createLocalImageConfiguration(context)).then((key) {
      provider.load(key, callback);
    });

person JRamos29    schedule 05.06.2020    source источник
comment
почему бы не использовать пакет https://pub.dev/packages/http напрямую и decodeImageFromList функцию верхнего уровня?   -  person pskink    schedule 05.06.2020
comment
С помощью http я могу кэшировать изображение? Я спросил о NetworkImage, потому что я намерен использовать CachedNetworkImageProvider.   -  person JRamos29    schedule 05.06.2020


Ответы (1)


сначала создайте поле в своем классе:

var cache = MapCache<String, ui.Image>();

тогда, чтобы получить ui.Image, вы можете просто позвонить:

var myUri = 'http:// ...';
var img = await cache.get(myUri, ifAbsent: (uri) {
  print('getting not cached image from $uri');
  return http.get(uri).then((resp) => decodeImageFromList(resp.bodyBytes));
});
print('image: $img');

конечно, вы должны добавить некоторую обработку ошибок HTTP-ответа, но это основная идея ...

person pskink    schedule 05.06.2020