声明:本篇文章在上篇文章的基础上进行封装,请先阅读上篇文章:ComposeUI——下拉刷新+上拉加载(简单封装)_lifeidroid的博客-优快云博客
经过上篇文章讲解了ComposeUI如何做下拉刷新和上拉加载的方式,虽然可以实现,但是不够优雅,不如原生来的更简洁,可不可以将他们融合起来做成一个既可以下拉刷新又可以上拉加载更多呢。想优雅就要找到不够优雅的原因:
1、下拉刷新和上拉加载的状态,需要单独变量控制【可不可以通过方法控制呢?】
2、每次编写代码都要进行嵌套,SwipeRefresh里面套一个LazyLoadMoreColum【代码太过冗余】
3、两处回调方法不够统一,SwipeRefresh里面下拉刷新的回调,LazyLoadMoreColum里面加载更多的回调。【能否在统一地方进行回调呢?】
分析出了问题,下面就来解决问题。得力于ComposeUI的纯函数的构造,达到我们的目的还是比较简单的,先看修改完后的使用方法吧:
ViewModel:
//用来控制下拉刷新上拉加载的状态
val swipeLazyColumState = SwipeLazyColumState()
UI:
SwipeLazyColum(
swipeLazyColumState = vm.swipeLazyColumState,
onRefreshCallBack = {//下拉刷新回调
vm.loadTopArticle()
vm.loadArticle(true)
},
loadMoreCallBack = { //加载更多的回调
vm.loadArticle(false)
},
) {
//以下内容跟LazyColum用法一样
item {
SwiperContent(dataSource = vm.swiperData)
}
items(vm.articleTopDataSource) { temp ->
ArticleItem(item = temp, true)
}
items(vm.articleDataSource) { temp ->
Art