我正在尝试实现与CureJoy iOS应用类似的功能,其中每个项目看起来都像一个独立的垂直列表项目,完全占据了屏幕高度,当我们向下滚动一点时,它会捕捉到占据整个屏幕高度的下一个项目。我尝试过很多类似的事情
NotificationListener(onNotification: ... // other code
包装到列表视图并调用处理滚动更改的函数
_func(ScrollNotification notification) {
... // other code
double scollPos = notification.metrics.pixels;
double toScroll = oldScrollPos;
newScrollPos = scrollPos;
if(newScrollPos < oldScrollPos)
toScroll -= rowHeight;
else
toScroll += rowHeight;
oldScrollPos = toScroll;
_scrollController.animateTo(toScroll,
duration: const Duration(milliseconds: 500),
curve: Curves.easeOut,
);
其他代码实际上执行一些逻辑,以保持上一个滚动位置可能小于或大于当前滚动位置,根据该逻辑,我将强制 step 到下一个或上一个列表项位置。这是非常无效的,会滚动到许多错误的位置并最终引发错误。
有一个非常优雅,更轻松的解决方案吗?