我正在尝试构建一个列表,您可以在两侧添加项目,并对其进行限制(因此两侧不是无限的)。在顶部,您将执行刷新操作,它将加载新项目,但您将停留在同一位置(新项目位于当前位置之上)。在底部,您将加载更多内容,但仍然停留在同一位置。
我尝试使用CustomScrollView和两个带有中心的sliver来实现此目的,但我想要做的事情是,在刷新时删除一些旧项,但实际上会跳到新的中心并刷新卡片。这是在顶部的那一点。
更好的行为描述:
假设您在 Twitter 应用程序中查看一个列表。如果向下滚动,它会加载越来越多、越来越旧的推文。有时,它会在后台加载较新的项目,这些项目将被加载到顶部,而无需让您滚动。最后,您可以返回顶部并下拉以刷新,它将下载新项目(Twitter 上有区别),并将这些项目添加到您的位置之上。
因此,有三个触发器:
1. 向下滚动以带有指示器的方式加载更多内容。 2. 下拉以刷新。 3. 后台自动刷新。
以上这些操作都不应使您更改位置。
CustomScrollView(
physics: const BouncingScrollPhysics(
parent: AlwaysScrollableScrollPhysics(),
),
center: _mainListKey,
controller: scrollController,
cacheExtent: 1000,
slivers: <Widget>[
SliverList(
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return ComplexWidget(item: topItems[index]),
},
childCount: topItems.count,
),),
SliverList(
key: _mainListKey
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return ComplexWidget(item: bottomItems[index]),
},
childCount: bottomItems.count,
),),
]
),
更好的行为描述:
假设您在 Twitter 应用程序中查看一个列表。如果向下滚动,它会加载越来越多、越来越旧的推文。有时,它会在后台加载较新的项目,这些项目将被加载到顶部,而无需让您滚动。最后,您可以返回顶部并下拉以刷新,它将下载新项目(Twitter 上有区别),并将这些项目添加到您的位置之上。
因此,有三个触发器:
1. 向下滚动以带有指示器的方式加载更多内容。 2. 下拉以刷新。 3. 后台自动刷新。
以上这些操作都不应使您更改位置。
ScrollablePositionedList()
怎么样?https://dev59.com/PVUM5IYBdhLWcg3wOeJY#58924218 - Karolina Hagegård