Closed Null8889 closed 10 months ago
快速不断的上啦加载时,onLoadMore()会有不执行的case,footer不消失
data class UIState(val isSuccess:T?=null, var hasMoreData:Boolean?=null, val isLoading:Boolean=false,val isRefresh:Boolean?=null)
class MainViewModel :ViewModel() {
private val pageLiveData = MutableLiveData<Int>() val dataList = SnapshotStateList<String>() val dataLiveData = pageLiveData.switchMap { page-> liveData { delay(2000) val strList = when(page){ 1-> (11..19).map { "$it" } 2-> (20..29).map { "$it" } 3-> (30..39).map { "$it" } 4-> (40..49).map { "$it" } 5-> (50..59).map { "$it" } 6-> (60..69).map { "$it" } 7-> (70..79).map { "$it" } 8-> (80..89).map { "$it" } 9-> (90..99).map { "$it" } else-> listOf("100","101","102") } emit(UIState(isSuccess = strList, isLoading = false, hasMoreData = strList.size < 11, isRefresh = (page == 1))) } } fun fetchData(page:Int){ pageLiveData.value = page }
}
@Composable fun Greeting() { val vm: MainViewModel = viewModel() val state = rememberRefreshLayoutState()
val lazyListState = rememberLazyListState() var page by remember { mutableStateOf(0) } val listState = vm.dataLiveData.observeAsState() LaunchedEffect(Unit) { state.refresh() } LaunchedEffect(listState.value) { listState.value?.isSuccess?.let { if (page == 1 && vm.dataList.isNotEmpty()) { vm.dataList.clear() } vm.dataList.addAll(it) lazyListState.animateScrollToItem(vm.dataList.size.minus(1)) } if (listState.value?.isRefresh == true) { state.finishRefresh( success = listState.value?.isSuccess != null, hasMoreData = listState.value?.hasMoreData ?: false ) } else if (listState.value?.isRefresh == false) { state.finishLoadMore( success = listState.value?.isSuccess != null, hasMoreData = listState.value?.hasMoreData ?: false ) } } RefreshLayout( state = state, contentScrollState = lazyListState, onRefresh = { page = 1 vm.fetchData(page) }, onLoadMore = { page++ vm.fetchData(page) }, enableLoadMore = true, enableRefresh = true, header = { DefaultRefreshHeader(state = it) }, footer = { DefaultRefreshFooter(state = it) } ) { if (vm.dataList.isNotEmpty()) { LazyColumn( state = lazyListState, modifier = Modifier .fillMaxSize() .background(Color.White) ) { items(vm.dataList) { Text( text = "Hello $it", fontSize = 20.sp, color = Color.Black, modifier = Modifier .fillMaxWidth() .height(30.dp) .background(Color.White) ) Spacer(modifier = Modifier.height(1.dp)) } } } }
我排查一下
修复了,试试 1.0.0-rc.2
快速不断的上啦加载时,onLoadMore()会有不执行的case,footer不消失
data class UIState(val isSuccess:T?=null, var hasMoreData:Boolean?=null, val isLoading:Boolean=false,val isRefresh:Boolean?=null)
class MainViewModel :ViewModel() {
}
@Composable fun Greeting() { val vm: MainViewModel = viewModel() val state = rememberRefreshLayoutState()
}