Flutter 如何在“颤振”中在画布上的路径内绘制图案?

Flutter 如何在“颤振”中在画布上的路径内绘制图案?,flutter,flutter-layout,flutter-image,flutter-canvas,Flutter,Flutter Layout,Flutter Image,Flutter Canvas,我想画一条交叉的对角线在画布上的路径内 现在,我已经通过将图像资源加载到ui.image中,然后使用CustomPainter和ImageShader在画布上绘制它来实现它。它可以工作,但它要求我为每一对线颜色创建一个图像资源(不仅仅是红色/黑色) 但是,我很想知道是否有比加载和绘制资产图像更有效的方法。这应该很容易——毕竟这只是重复的线条——但我不知道如何绘制它们并将它们剪裁到路径上 有什么建议吗 仅剪切路径并在路径边界中绘制线: var b = path.getBounds(

我想画一条交叉的对角线在画布上的路径内

现在,我已经通过将图像资源加载到
ui.image
中,然后使用
CustomPainter
ImageShader
在画布上绘制它来实现它。它可以工作,但它要求我为每一对线颜色创建一个图像资源(不仅仅是红色/黑色)

但是,我很想知道是否有比加载和绘制资产图像更有效的方法。这应该很容易——毕竟这只是重复的线条——但我不知道如何绘制它们并将它们剪裁到路径上

有什么建议吗


仅剪切路径并在路径边界中绘制线:

        var b = path.getBounds();

        FCanvas.save();
        FCanvas.clipPath(path);

        for (int i = step; i < b.width; i = i + step)
          FCanvas.drawLine(Offset(b.left + i, b.top), Offset(b.left + i, b.bottom), getPenPaint());

        for (int i = step; i < b.height; i = i + step)
          FCanvas.drawLine(Offset(b.left, b.top + i), Offset(b.right, b.top + i), getPenPaint());


        FCanvas.restore();
var b=path.getBounds();
FCanvas.save();
FCanvas.clipPath(路径);
对于(int i=步长;i
剪裁是一种选择吗?例如,用你想要的任何画师绘制完整的矩形背景,然后添加某种剪辑以删除你不想要的区域@塞巴斯蒂安罗斯我需要把它画在画布上,还有很多其他的东西也画在画布上,所以我不能简单地把它夹在路径上。我想我需要在一个单独的图像上绘制它,然后以与使用资产图像相同的方式使用该图像。或者,如果有一种方法可以将一个画布复制到另一个画布上,这可能是一种选择,但我在搜索时没有找到任何这样的解决方案。
          canvas.drawPath(path, Paint()
            ..shader = ImageShader(myImage, TileMode.repeated, TileMode.repeated, Matrix4.identity().scaled(0.2).storage)
            ..style = PaintingStyle.fill
          );

          canvas.drawPath(path, Paint()
            ..style = PaintingStyle.stroke
            ..strokeJoin= StrokeJoin.round
            ..strokeCap= StrokeCap.round
            ..color = Colors.black
            ..strokeWidth = 1
          );
        var b = path.getBounds();

        FCanvas.save();
        FCanvas.clipPath(path);

        for (int i = step; i < b.width; i = i + step)
          FCanvas.drawLine(Offset(b.left + i, b.top), Offset(b.left + i, b.bottom), getPenPaint());

        for (int i = step; i < b.height; i = i + step)
          FCanvas.drawLine(Offset(b.left, b.top + i), Offset(b.right, b.top + i), getPenPaint());


        FCanvas.restore();