如何在其他小部件上绘制InkResponse?

问题描述 投票:1回答:2

我在LeafRenderObjectWidget有一个Column

Column(children: [CustomRenderObject(), InkResponse(child: ..), ...])

在那之下,有一个InkResponse。通常情况下,来自InkResponse的启动和突出显示将在Column上方的上一个小部件上方绘制。如果我有以下场景,则突出显示和启动将呈现在Container上方:

Column(children: [Container(height: ..), InkResponse(child: ..), ...])

然而,在我使用RenderObject的场景中,我在CustomRenderObjectpaint method of my RenderBox小部件底部绘制的任何内容都将被绘制在InkResponse上方并突出显示。 MaterialColumn的父母。

这意味着我的InkReponse突出显示和飞溅在顶部被切断。我不想在我的InkResponse上添加额外的填充。我怎么能让我的InkResponse在我的RenderBox上面画?

flutter flutter-layout
2个回答
0
投票

这个问题的解决方案是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剪辑成矩形。


0
投票

InkResponse将在树中的父窗口小部件上方绘制并且不在兄弟姐妹中。这就解释了为什么它在你的Material小部件上画在Column之上,因为Column本身只是一个布局MultiChildRenderObjectWidget

您提供的解决方案实际上是一种有时使用的好方法,但由于您想在LeafRenderObjectWidget中渲染启动效果,并且因为它没有子节点,因此Flutter不知道您想要在何处渲染启动效果。我担心你不能使用InkResponse在叶子小部件中渲染飞溅。

一个可能有用的丑陋解决方案,可以从使用Stack将每个小部件放在另一个小部件的顶部,但你仍然必须确保它们具有相同的外观。如果它是一个复杂的渲染对象,这可能很棘手。

© www.soinside.com 2019 - 2024. All rights reserved.