Flutter:markNeedsLayout和markNeedsPaint永远不会导致RenderBox被重绘

euoag5mw  于 2023-05-19  发布在  Flutter
关注(0)|答案(1)|浏览(126)

我有一个回调,当用户拖动一个RenderBox时会发生-回调被触发-RenderBox在MultiChildRenderObjectWidget中。
我需要改变孩子的位置,然后用markNeedsPaint()标记它以重新绘制-但这是永远不会发生的。
这是从我的代码中截取的:

final RenderObject? renderObject = _myWidgetKey.currentContext?.findRenderObject();
          renderObject?.visitChildren((child) {
            if (child is RenderTimelineItem) {
              child._position = 2;
              child.markNeedsPaint();
              renderObject.markNeedsPaint();

            }
          });

在调试器中,我看到_position值更新为2,我还看到"NEEDS-PAINT" Flag设置为child和renderObject。
是否有一个特定的功能,使重新绘制立即运行?
谢谢

编辑:

我想做的事情是,我想把这个从07:10开始的约会拖到第二个资源组。我正在编辑dynamic_timeline 0.1.2包。我已经在同一资源中实现了约会的水平拖动。当用户按下ctrl并开始拖动时,约会应该能够被向下拖动到下一个资源组。

3zwjbxry

3zwjbxry1#

我知道了
RenderTimelineItemDragcontroller回调中,我必须将位置给RenderTimelineItem及其父节点(DynamicTimelineParentData),然后是markParentNeedsLayout()-这里的例子:

void _onUpdateUpDownDrag(DragUpdateDetails details) {
    _position = 2;
    parentData?.position = 2;
    markParentNeedsLayout();

  }

相关问题