BackdropFilter 如何应用它的过滤器?

How does BackdropFilter apply it's filter?

我对 BackdropFilter 小部件在 Flutter 中的工作方式感到非常困惑。 直觉上我希望小部件简单地将过滤器应用于其 child 的约束,但事实并非如此。

例如:

Column(
      children: [
        Text('Hello world 1'),
        BackdropFilter(filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5), 
            child: Text('Hello world 2'),
        ),
        Text('Hello world 3'),
      ],
    )

该代码的结果如下所示:

第一个文本模糊,而 child 不受影响。

此外,如果我要尝试这样的事情:

child: Column(
    children: [
      Text('Hello world 0'),
      Container(
        child: Column(
          children: [
            Text('Hello world 1'),
            BackdropFilter(filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5), 
               child: Text('Hello world 2'),
            ),
            Text('Hello world 3'),
          ],
        ),
      ),
    ],
  )

结果将是:

这里的机制到底是什么?过滤器是否仅适用于 BackdropFilter 的祖先及其在它之前声明的兄弟姐妹,而不适用于它的 child? child 的目的是什么?

P.S

我知道在树中某处添加 ClipRect 会停止将过滤器应用于它的任何祖先或以前声明的兄弟姐妹:

Column(
    children: [
      Text('Hello world 0'),
      ClipRect(
        child: Container(
          child: Column(
            children: [
              Text('Hello world 1'),
              BackdropFilter(filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5), child: Text('Hello world 2')),
              Text('Hello world 3'),
            ],
          ),
        ),
      ),
    ],
  )

这将导致:

我的问题仍然成立。

Flutters BackdropFilter 应用于它下面的子元素(例如在堆栈中)而不是它的子元素。这样 BackdropFilter 可以应用于多个或部分小部件。