refactor(android): inline refresh load state

This commit is contained in:
Harsh Shandilya 2024-08-28 12:18:58 +05:30
parent e68af9be16
commit c8d1491196

View file

@ -18,6 +18,9 @@ import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.HorizontalDivider
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@ -49,14 +52,18 @@ fun NetworkPosts(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
ReportDrawnWhen { lazyPagingItems.itemCount > 0 } ReportDrawnWhen { lazyPagingItems.itemCount > 0 }
val refreshLoadState = lazyPagingItems.loadState.refresh val isRefreshing by
val isRefreshing = refreshLoadState == LoadState.Loading && lazyPagingItems.itemCount == 0 remember(lazyPagingItems) {
derivedStateOf {
lazyPagingItems.loadState.refresh == LoadState.Loading && lazyPagingItems.itemCount == 0
}
}
val pullRefreshState = rememberPullRefreshState(isRefreshing, lazyPagingItems::refresh) val pullRefreshState = rememberPullRefreshState(isRefreshing, lazyPagingItems::refresh)
Box(modifier = modifier.fillMaxSize().pullRefresh(pullRefreshState)) { Box(modifier = modifier.fillMaxSize().pullRefresh(pullRefreshState)) {
if (lazyPagingItems.itemCount == 0 && refreshLoadState is LoadState.Error) { if (lazyPagingItems.itemCount == 0 && lazyPagingItems.loadState.refresh is LoadState.Error) {
NetworkError( NetworkError(
label = "Failed to load posts", label = "Failed to load posts",
error = refreshLoadState.error, error = (lazyPagingItems.loadState.refresh as LoadState.Error).error,
modifier = Modifier.align(Alignment.Center), modifier = Modifier.align(Alignment.Center),
) )
} else { } else {