我想对一个ListView应用一个ImageFilter,以便所有子项都受到影响,并且所有子项相互影响,例如混合颜色。(因此,将过滤器应用于子项而不是listview本身是行不通的)。
这很好。但现在我需要在之前绘制的小部件上放置另一个小部件(考虑颜色渐变的容器)- 而不受祖先imageFiltered图像滤镜的影响。
我想要一个“Blocker”小部件,以便先前的过滤器仅适用于树中的此部分 - 不再向下传递。这可能吗? (顺便说一句,围绕ListViews子项的BackdropFilter也无效,尽管可以通过ClipRect在上游停止它,但它不会让子项“交互”/让过滤器混合子项。)
阅读了很多关于canvas和CustomPaints的文章后,我认为我需要使用RenderObject来解决问题,就像here建议的那样,但我还是无法做到... 而且我似乎仍然难以理解canvas和paint的概念:父小部件的过滤器甚至能被“阻止”吗?
作为一种解决方法,我想象了一个第二个、同步且不可交互的ListView,具有所需效果,作为一个包含所有不应被操作的内容的主要ListView的背景...。
在写作时,我想到了一个想法:也许可以自定义一个listviews builder来接受第二个未受影响的子项?
非常感谢您的帮助。
简而言之:
这很好。但现在我需要在之前绘制的小部件上放置另一个小部件(考虑颜色渐变的容器)- 而不受祖先imageFiltered图像滤镜的影响。
我想要一个“Blocker”小部件,以便先前的过滤器仅适用于树中的此部分 - 不再向下传递。这可能吗? (顺便说一句,围绕ListViews子项的BackdropFilter也无效,尽管可以通过ClipRect在上游停止它,但它不会让子项“交互”/让过滤器混合子项。)
阅读了很多关于canvas和CustomPaints的文章后,我认为我需要使用RenderObject来解决问题,就像here建议的那样,但我还是无法做到... 而且我似乎仍然难以理解canvas和paint的概念:父小部件的过滤器甚至能被“阻止”吗?
作为一种解决方法,我想象了一个第二个、同步且不可交互的ListView,具有所需效果,作为一个包含所有不应被操作的内容的主要ListView的背景...。
在写作时,我想到了一个想法:也许可以自定义一个listviews builder来接受第二个未受影响的子项?
非常感谢您的帮助。
简而言之:
MultipleCustomFilters( // <- ImageFiltered(filter: filter1, child: ImageFiltered(filter2, child: child
child: ListView.builder(
itemCount: 5,
itemBuilder: (BuildContext context, int index) {
return Center(
child: Stack(
children: [
Container(
width: 100,
height: 100,
color: Colors.blue,
child: Text("I want to receive all filters!"),
),
FilterBlocker( // <- How to build this?
child: Container(
width: 40,
height: 40,
color: Colors.indigo,
child: Text("I don't want to receive any previous paint manipulations! How?"),
),
),
],
...