Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 如何防止RenderBox覆盖其他小部件?_Dart_Flutter_Flutter Layout - Fatal编程技术网

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
不要