在Flutter中drawImage或paintImage均无法正常工作

时间:2018-09-18 17:06:15

标签: canvas dart flutter flutter-layout

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

    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的图像时,出现了以下错误消息。

  

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

我真的不知道会出什么问题,我已经看到其他与ui.Image具有类似方法的代码。

请告知。

1 个答案:

答案 0 :(得分:3)

在Flutter中有两个称为Image的类,使用不同的包。

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

还有一个ui软件包Image,用于在较低级别(例如,在CustomPainter中绘画时使用)。由于此版本位于ui软件包中,因此通常使用ui前缀导入,如下所示:

import 'dart:ui' as ui;

请勿将material导入为ui!这将导致很多混乱。

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

要使用资产创建ui.Image,请使用以下代码段:

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