使用案例
我最近发现自己经常使用 NestedScrollView.sliverOverlapAbsorberHandleFor
,因为我正在向我的应用中添加 SliverAppBar
。
一个立即出现的问题是:
每当我在一个 NestedScrollView
中时,我总是不得不手动注入一个 SliverOverlapAbsorber
和一个 SliverOverlapInjector
,因为没有方便的方法可以自动检测周围的 NestedScrollView
并用 SliverOverlapAbsorber
注入一个 NestedScrollView.sliverOverlapAbsorberHandleFor
。
这是因为,如果我在一个没有 NestedScrollView
的上下文中访问 NestedScrollView.sliverOverlapAbsorberHandleFor
,会抛出一个 AssertionError。
建议
如果有一个内置的方法可以让我检查周围的 NestedScrollView
,那将是非常方便和方便的。
最好的情况下,这个检查可以依赖于在树中查找一个 _InheritedNestedScrollView
。
我现在当然可以手动执行一个非常慢的 Widget 树搜索来查找一个 NestedScrollView
,然后根据那个结果决定是否访问 NestedScrollView.sliverOverlapAbsorberHandleFor
。
理想情况下,应该有一些类似于 NestedScrollViewSliverOverlapAbsorber
和一个伴随的 NestedScrollViewSliverOverlapInjector
的东西,它们在 NestedScrollView
内部有条件地注入所需的 sliver widgets,但我也愿意自己编写这些东西。
基本上,我试图减少在 NestedScrollView
中设置 SliverAppBar
的样板代码,而不必遍历 widget 树并破坏我的渲染性能。
2条答案
按热度按时间kcugc4gi1#
如果我在一个没有NestedScrollView的上下文中访问NestedScrollView.sliverOverlapAbsorberHandleFor,将会抛出AssertionError。
也许我们需要一个具有可空返回类型的NestedScrollView.sliverOverlapAbsorberHandleMaybeFor方法?这样你就可以知道是否需要插入重叠注入器。
smdncfj32#
当然,这是一个解决方案。
不幸的是,
SliverOverlapAbsorber
和SliverOverlapInjector
都不接受可空的回调函数,所以我将不得不有条件地插入或移除它们(而不是让小部件在不在NestedScrollView内时只是无操作)。不过,正如前面提到的,我可以自己制作这些小部件。