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
可以应用于多个或部分小部件。
我对 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
可以应用于多个或部分小部件。