DrawImage или paintImage не работают должным образом в Flutter - PullRequest
0 голосов
/ 18 сентября 2018

Я в основном хочу показать изображение, которое у меня есть в папке активов, на холсте.

    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) нельзя присвоить типу аргумента' Изображение (C: \ ABC \ flutter \ packages \ flutter \ lib \ src \ widgets \ image.dart) '.\ flutter \ bin \ cache \ pkg \ sky_engine \ lib \ ui \ painting.dart) '.

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

Пожалуйста, сообщите.

1 Ответ

0 голосов
/ 18 сентября 2018

Существует два класса с именем 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;
  }
...