SliverPersistentHeader如何实现固定和浮动效果?

时间:2019-08-21 08:47:22

标签: flutter flutter-sliver

我已经探索了很长时间,尝试阅读源代码并调试实际代码。

我发现了一种通过在geometry方法中将paintOrigin的{​​{1}}属性设置为constraints.scrollOffset来实现固定效果的方法。

我认为performLayout首先使用相同的技巧。它确实设置了SliverPersistentHeader,但与paintOrigin无关。这是scrollOffset的performLayout方法。

RenderSliverPinnedPersistentHeader

我认为@override void performLayout() { final double maxExtent = this.maxExtent; final bool overlapsContent = constraints.overlap > 0.0; excludeFromSemanticsScrolling = overlapsContent || (constraints.scrollOffset > maxExtent - minExtent); layoutChild(constraints.scrollOffset, maxExtent, overlapsContent: overlapsContent); final double layoutExtent = (maxExtent - constraints.scrollOffset).clamp(0.0, constraints.remainingPaintExtent); geometry = SliverGeometry( scrollExtent: maxExtent, paintOrigin: constraints.overlap, paintExtent: math.min(childExtent, constraints.remainingPaintExtent), layoutExtent: layoutExtent, maxPaintExtent: maxExtent, maxScrollObstructionExtent: minExtent, cacheExtent: layoutExtent > 0.0 ? -constraints.cacheOrigin + layoutExtent : layoutExtent, hasVisualOverflow: true, // Conservatively say we do have overflow to avoid complexity. ); } constraints.overlap有联系。但是,当我调试代码时,发现scrollOffset仍然为零,即使标头已固定。

paintOrigin剂量如何达到固定作用?

0 个答案:

没有答案