Dart 如何防止RenderBox覆盖其他小部件?
如果我在屏幕上的任何位置都有一个Dart 如何防止RenderBox覆盖其他小部件?,dart,flutter,flutter-layout,Dart,Flutter,Flutter Layout,如果我在屏幕上的任何位置都有一个RenderBox(以a的形式),它总是会被一个PaintingContext调用,它从偏移量(0.0,0.0)开始。为了方便起见,可以通过翻译画布或使用 现在,RenderBox将从其实际位置开始绘制。这对我来说很好,但是,我想限制我的RenderBox在其他小部件上绘制,即使画布操作发生在这些界限之外 我该如何处理这个问题?我曾考虑过裁剪LeafRenderObjectWidget,但我不知道我的RenderBox的区域将从哪里开始 如果之前还不清楚,我已
RenderBox
(以a的形式),它总是会被一个PaintingContext
调用,它从偏移量(0.0,0.0)
开始。为了方便起见,可以通过翻译画布
或使用
现在,RenderBox
将从其实际位置开始绘制。这对我来说很好,但是,我想限制我的RenderBox
在其他小部件上绘制,即使画布操作发生在这些界限之外
我该如何处理这个问题?我曾考虑过裁剪LeafRenderObjectWidget
,但我不知道我的RenderBox
的区域将从哪里开始
如果之前还不清楚,我已经具备了确定
RenderBox
开始和结束位置所需的一切。我从偏移量
中获取上部位置,该偏移量作为绘制
中的一个参数提供,我有大小,因为我在performResize
中设置了它,但我不知道如何使用它进行剪裁,因为该信息位于渲染器框
中有几种可能性:
- 将您的
包装到RenderBox
中。很容易,但有点作弊ClipRect
- 在
RenderBox的
函数中使用paint
PaintingContext.pushClipRect
@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
});
}
下面的剪辑使绘画不溢出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
});
}
有几种可能性:
- 将您的
包装到RenderBox
中。很容易,但有点作弊ClipRect
- 在
RenderBox的
函数中使用paint
PaintingContext.pushClipRect
@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
});
}
下面的剪辑使绘画不溢出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,
),
),
),
正如公认的答案中所提到的,用ClipRect包装您的RenderBox非常有效!它如此简单以至于我忽略了它。这就是代码的样子
Container(
/*Code for container*/
child: ClipRect(
child: CustomPaint(
painter: MyPainter(),
size: Size.infinite,
),
),
),
视情况而定。他们做的事情并不完全一样
pushX
方法将渲染拆分为独立的步骤canvas.x
don'tDepends。他们做的事情并不完全一样pushX
方法将渲染拆分为独立的步骤<代码>画布.x不要