扩展NestedScrollView来修复了下面的问题
3.在NestedScrollView的body中不通过设置ScrollController(设置了会跟内部Controller冲突)来完成下拉刷新,增量加载,滚动到顶部
Web demo for ExtendedNestedScrollView
- extended_nested_scroll_view
- Example for issue 1
- Example for issue 2
- Do without ScrollController in NestedScrollView's body
- ☕️Buy me a coffee
在pinnedHeaderSliverHeightBuilder回调中设置全部pinned的header的高度, demo里面高度为 状态栏高度+SliverAppbar的高度
var tabBarHeight = primaryTabBar.preferredSize.height;
var pinnedHeaderHeight =
//statusBar height
statusBarHeight +
//pinned SliverAppBar height in header
kToolbarHeight;
return NestedScrollView(
pinnedHeaderSliverHeightBuilder: () {
return pinnedHeaderHeight;
},
我们通常使用下面的方法来保持列表的滚动状态:
场景 | onlyOneScrollInBody | 描述 |
---|---|---|
AutomaticKeepAliveClientMixin | true | ScrollPosition 不会被释放, 将 onlyOneScrollInBody 设置为 true, 这样我们才能知道哪个列表是当前活动的. |
PageStorageKey | false | ScrollPosition 会被释放, PageStorageKey 只是记录了滚动状态, ExtendedNestedScrollView 中的 scroll positions 只会有一个. |
ExtendedNestedScrollView(
onlyOneScrollInBody: true,
)
提供 ExtendedVisibilityDetector 组件来指出当前可见的列表
ExtendedVisibilityDetector(
uniqueKey: const Key('Tab1'),
child: ListView(),
)
因为无法给NestedScrollView的body中的列表设置ScrollController(这样会破坏NestedScrollView内部的InnerScrollController的行为),所以我这里给大家提供了Demos来展示怎么不通过ScrollController来完成