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

时间:2019-03-11 16:08:44

标签: dart flutter flutter-layout

如果我在屏幕上的任何地方都有一个RenderBox(以LeafRenderObjectWidget的形式),它将始终以从PaintingContext开始的Offset(0.0, 0.0)进行调用。为了方便起见,可以通过翻译Canvas或使用RenderShiftedBox来解决此问题。

现在,RenderBox将从其实际位置绘画。这对我来说很好用,但是,即使画布操作发生在这些边界之外,我也想限制我的RenderBox不能覆盖其他小部件。

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

如果以前不清楚,我将确定RenderBox的开始和结束位置。我从Offset中作为参数提供的paint获得了较高的位置,并且具有尺寸,因为我在performResize中进行了设置,但是我不知道如何使用它进行裁剪因为该信息位于RenderBox内部。

2 个答案:

答案 0 :(得分:1)

有几种可能性:

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

  • PaintingContext.pushClipRect的{​​{1}}函数中使用paint

以下剪贴画不会溢出RenderBox

RenderBox

答案 1 :(得分:0)

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

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