我在LeafRenderObjectWidget
有一个Column
:
Column(children: [CustomRenderObject(), InkResponse(child: ..), ...])
在那之下,有一个InkResponse
。通常情况下,来自InkResponse
的启动和突出显示将在Column
上方的上一个小部件上方绘制。如果我有以下场景,则突出显示和启动将呈现在Container
上方:
Column(children: [Container(height: ..), InkResponse(child: ..), ...])
然而,在我使用RenderObject
的场景中,我在CustomRenderObject
的paint
method of my RenderBox
小部件底部绘制的任何内容都将被绘制在InkResponse
上方并突出显示。
Material
是Column
的父母。
这意味着我的InkReponse
突出显示和飞溅在顶部被切断。我不想在我的InkResponse
上添加额外的填充。我怎么能让我的InkResponse
在我的RenderBox
上面画?
这个问题的解决方案是described in the troubleshooting section of the InkResponse
class。
如果你只是使用一个简单的彩色Container
或类似的东西,你可以使用Ink
widget,它将绘制到Material
,从而呈现InkResponse
的亮点和飞溅在上面。
另一个解决方案是添加Material
类型的MaterialType.transparency
:
Material(type: MaterialType.transparency, child: InkResponse(..))
这将在InkResponse
本身正下方。但是,这并没有解决我的问题,因为它将InkResponse
剪辑成矩形。
InkResponse
将在树中的父窗口小部件上方绘制并且不在兄弟姐妹中。这就解释了为什么它在你的Material
小部件上画在Column
之上,因为Column
本身只是一个布局MultiChildRenderObjectWidget
。
您提供的解决方案实际上是一种有时使用的好方法,但由于您想在LeafRenderObjectWidget
中渲染启动效果,并且因为它没有子节点,因此Flutter不知道您想要在何处渲染启动效果。我担心你不能使用InkResponse
在叶子小部件中渲染飞溅。
一个可能有用的丑陋解决方案,可以从使用Stack
将每个小部件放在另一个小部件的顶部,但你仍然必须确保它们具有相同的外观。如果它是一个复杂的渲染对象,这可能很棘手。