【问题标题】:Flutter - How to convert an NetworkImage into an ui.Image?Flutter - 如何将 NetworkImage 转换为 ui.Image?
【发布时间】:2020-06-05 03:34:14
【问题描述】:

我需要将 NetworkImage 转换为 ui.Image。 我尝试使用此question 中的给定解决方案并进行一些调整,但它不起作用。

有人可以帮助我吗?

 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);
    });

【问题讨论】:

  • 为什么不直接使用http包和decodeImageFromList顶层函数呢?
  • 用http我可以缓存图片吗?我询问了 NetworkImage,因为我打算使用 CachedNetworkImageProvider。

标签: image flutter


【解决方案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 响应错误处理,但这是基本思想...

【讨论】:

    猜你喜欢
    • 2020-08-09
    • 2021-03-23
    • 2018-11-25
    • 1970-01-01
    • 2023-02-07
    • 2019-09-28
    • 2020-10-08
    • 2019-09-10
    • 2021-10-28
    相关资源
    最近更新 更多