如何防止 RenderBox 覆盖其他小部件?

How to prevent RenderBox from drawing over other widgets?

如果我有一个RenderBox(为方便起见,形式为LeafRenderObjectWidget) anywhere on the screen, it will always get called with a PaintingContext that starts at Offset(0.0, 0.0). This can be fixed by translating the Canvas or using a RenderShiftedBox

现在,RenderBox 将从其实际位置 开始绘制。这对我来说很好,但是,即使 canvas 操作发生在这些范围之外,我也想限制我的 RenderBox 绘制其他小部件。

我该如何处理?我考虑过剪裁 LeafRenderObjectWidget,但我不知道我的 RenderBox 区域将从哪里开始。

如果之前不清楚,我拥有确定 RenderBox 开始和结束位置所需的一切。我从 paint 中作为参数提供的 Offset 获得了较高的位置,并且我有尺寸,因为我在 performResize 中设置了它,但我不知道如何使用它进行剪辑因为该信息在 RenderBox.

有几种可能性:

  • 将您的 RenderBox 包装成 ClipRect。简单但有点作弊

  • RenderBox

  • paint 函数中使用 PaintingContext.pushClipRect

下面夹个画不溢出来RenderBox

@override
void paint(PaintingContext context, Offset offset) {
  context.pushClipRect(
      needsCompositing, offset, Rect.fromLTWH(0, 0, size.width, size.height),
      (context, offset) {
    // TODO: do some painting
  });
}

如已接受的答案中所述,用 ClipRect 包裹 RenderBox 效果很好!太简单了,我忽略了。这就是代码的样子

Container(
          /*Code for container*/
          child: ClipRect(
           child: CustomPaint(
             painter: MyPainter(),
             size: Size.infinite,
           ), 
          ),
        ),