flutter 允许安全地探测周围的_InheritedNestedScrollView

cnjp1d6j  于 6个月前  发布在  Flutter
关注(0)|答案(2)|浏览(44)

使用案例

我最近发现自己经常使用 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 树并破坏我的渲染性能。

kcugc4gi

kcugc4gi1#

如果我在一个没有NestedScrollView的上下文中访问NestedScrollView.sliverOverlapAbsorberHandleFor,将会抛出AssertionError。
也许我们需要一个具有可空返回类型的NestedScrollView.sliverOverlapAbsorberHandleMaybeFor方法?这样你就可以知道是否需要插入重叠注入器。

smdncfj3

smdncfj32#

当然,这是一个解决方案。
不幸的是,SliverOverlapAbsorberSliverOverlapInjector都不接受可空的回调函数,所以我将不得不有条件地插入或移除它们(而不是让小部件在不在NestedScrollView内时只是无操作)。不过,正如前面提到的,我可以自己制作这些小部件。

相关问题