编辑在进一步阅读后,我在 layer.dart 源文件中遇到了这个:
大多数图层的属性可以发生变化,并且图层可以移动到不同的父级。
所以,我更新了这个问题,我希望这可以进一步缩小范围(原文如下):
是否可以将子窗口小部件的渲染层向上移动,以便早期锚定窗口小部件的渲染层成为其父窗口?如果是这样,一个例子会很棒。用例见下文。
原始问题:
也许我在某个地方完全错了,有一种更简单的方法可以存档,但我被卡住了。试图摆脱我的盒子。这是重新表述这个问题的尝试。
我想要存档的内容:我希望能够在我的树中某处说:blur everything from here
然后在树下更远的某个地方再说一遍from now on no more blurring, paint as you are
。
伪树:
Stack:
chidren: [
[...],
MyMagicBlurrer: <- blur from here on
children:
WhateverWidget, <- blurred
[...]
ListView.builder {
return Center: Stack[
[...],
Transform:
child: Container <- still blurred
child: MyMagicUnBlurrer <- Stops the blur!
children: [...], <- no more blurred.
[...],
问题主要是'ListView'(也可以SliverChildBuilderDelegate
设置addRepaintBoundaries
为false):为了将listviews子项模糊在一起,ImageFilter
需要在树的上方(对吗?)。这就是为什么BackDropFilter
对孩子不起作用的原因。
我很确定我需要访问RenderObject
s. 我想出了如何通过canvas.saveLayer
and来绘制我的东西.paintChild()
。我没有弄清楚:是否可以说:(all my renderobjects childs should now paint to Layer1
模糊层)然后,通过另一个访问渲染对象(MyMagicUnBlurrer)all my children from now on shall paint to layer2
(一个新的 dstOver 复合层)?!
疯狂猜测:我可以键入ImageFilter.blur()
Widget 并由树下的孩子引用它的“Paint()”层吗?
可能我的想法完全错了..任何建议都非常感谢!
@creativecreatoror 可能不适合你?:)