首页 > 解决方案 > 在 Flutter 中 drawImage 或 paintImage 都不能正常工作

问题描述

我基本上想在画布上显示我在资产文件夹中的图像。

    import 'package:flutter/material.dart' as ui;

    ...

    ui.Image img = ui.Image.asset("images/some_image.png");
    ui.paintImage(canvas: canvas, image: img);

当我尝试将 img 分配给paintImage 的图像时,收到以下错误消息。

参数类型 'Image (C:\ABC\flutter\packages\flutter\lib\src\widgets\image.dart)' 不能分配给参数类型 'Image (C:\ABC\flutter\bin\cache \pkg\sky_engine\lib\ui\painting.dart)'。

我真的不知道会出什么问题,我见过其他代码与 ui.Image 有类似的方法。

请指教。

标签: canvasdartflutterflutter-layout

解决方案


在 Flutter 中调用了两个类Image,在不同的包中。

Widget,它的行为类似于一个小部件,可以通过其命名的构造函数从资产、内存或网络中实例化。

还有 ui 包Image用于在较低级别进行绘画时,例如在CustomPainter. 由于此版本在ui包中,因此通常使用如下ui前缀导入:

import 'dart:ui' as ui;

不要导入materialui!这会导致很多混乱。

要制作小部件,请使用Image.asset构造函数,并传递资产名称。

ui.Image使用资产制作 a ,请使用以下代码段:

  Future<ui.Image> load(String asset) async {
    ByteData data = await rootBundle.load(asset);
    ui.Codec codec = await ui.instantiateImageCodec(data.buffer.asUint8List());
    ui.FrameInfo fi = await codec.getNextFrame();
    return fi.image;
  }

推荐阅读