当我当时尝试使用火焰引擎加载base64图像时,出现以下错误我用火焰:^ 0.27.0

问题描述

当我当时使用aync await方法时,它可以正常工作,但是当我尝试将图像加载到Flame的组件类中时,出现错误:

我创建了一个Background类,该类扩展了火焰引擎的组件类。现在,我正在尝试使用then函数加载base64图像,但是出现错误,但是当我使用异步await方法进行图像加载时,它可以正常工作。

class Background extends Component with Resizable {
    static final Paint _paint = Paint();
    Size imageSize = Size(411.42857142857144,822.8571428571429);

    @override
    void render(Canvas c) {
        Rect myRect = const Offset(0.0,0.0) & Size(size.width,size.height);
        Flame.images.fromBase64('demo',imageBase).then((value) {
        paintImage(canvas: c,rect: myRect,image: value);
    });
}

@override
void update(double t) {
// TODO: implement update
}



void paintImage({
    @required Canvas canvas,@required Rect rect,@required image.Image image,String debugImageLabel,double scale = 1.0,ColorFilter colorFilter,BoxFit fit,Alignment alignment = Alignment.center,Rect centerSlice,ImageRepeat repeat = ImageRepeat.noRepeat,bool flipHorizontally = false,bool invertColors = false,FilterQuality filterQuality = FilterQuality.low,bool isAntiAlias = false,}) {
    if (rect.isEmpty) return;
    Size outputSize = rect.size;
    Size inputSize = Size(image.width.toDouble(),image.height.toDouble());
    Offset sliceBorder;
    if (centerSlice != null) {
        sliceBorder = Offset(
        centerSlice.left + inputSize.width - centerSlice.right,centerSlice.top + inputSize.height - centerSlice.bottom,);
    outputSize = outputSize - sliceBorder as Size;
    inputSize = inputSize - sliceBorder as Size;
    }
    fit ??= centerSlice == null ? BoxFit.scaleDown : BoxFit.fill;
    assert(centerSlice == null || (fit != BoxFit.none && fit != BoxFit.cover));
    final FittedSizes fittedSizes =
    applyBoxFit(fit,inputSize / scale,outputSize);
    final Size sourceSize = fittedSizes.source * scale;
    Size destinationSize = fittedSizes.destination;
    if (centerSlice != null) {
        outputSize += sliceBorder;
        destinationSize += sliceBorder;
    }
// Output size is fully calculated.

    if (repeat != ImageRepeat.noRepeat && destinationSize == outputSize) {
        repeat = ImageRepeat.noRepeat;
    }
    final Paint paint = Paint()..isAntiAlias = isAntiAlias;
    if (colorFilter != null) paint.colorFilter = colorFilter;
    if (sourceSize != destinationSize) {
        paint.filterQuality = filterQuality;
    }
    paint.invertColors = invertColors;
    final double halfWidthDelta =
        (outputSize.width - destinationSize.width) / 2.0;
    final double halfHeightDelta =
        (outputSize.height - destinationSize.height) / 2.0;
    final double dx = halfWidthDelta +
        (flipHorizontally ? -alignment.x : alignment.x) * halfWidthDelta;
    final double dy = halfHeightDelta + alignment.y * halfHeightDelta;
    final Offset destinationPosition = rect.topLeft.translate(dx,dy);
    final Rect destinationRect = destinationPosition & destinationSize;
    final bool needSave = repeat != ImageRepeat.noRepeat || flipHorizontally;
    if (needSave) canvas.save();
    if (repeat != ImageRepeat.noRepeat) canvas.clipRect(rect);
    if (flipHorizontally) {
    final double dx = -(rect.left + rect.width / 2.0);
    canvas.translate(-dx,0.0);
    canvas.scale(-1.0,1.0);
    canvas.translate(dx,0.0);
    }
    if (centerSlice == null) {
    final Rect sourceRect = alignment.inscribe(
        sourceSize,Offset.zero & inputSize,);
    if (repeat == ImageRepeat.noRepeat) {
        canvas.drawImageRect(image,sourceRect,destinationRect,paint);
    } else {
        print("no repet else");
    }
    }
//if (needSave) canvas.restore();
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)