由于前两种实现都有各种各样的问题,现在使用即时数据的方式,每次数据都是 “新鲜” 的,只生成当前页面的月数据 和点击事件对应本行的周数据。这样保证了 数据量小,轻量级,响应迅速,不至于创建很大的一个list集合。
并且还是用了以下代码 准确的判断滑动的页面 ,当做回调使用
LaunchedEffect(pagerState) {
snapshotFlow { pagerState.currentPage }.collect { page ->
XLogger.d("snapshotFlow============>$page")
homeViewModel.dispatch(HomeAction.UpdateData(page))
}
}
数据生成的算法和绘制基本一致,UIState 添加了少许参数 用于数据切换。
看一下动效图