@@ -67,6 +67,10 @@ import androidx.compose.material3.TextButton
6767import androidx.compose.material3.TopAppBarDefaults
6868import androidx.compose.material3.TopAppBarScrollBehavior
6969import androidx.compose.material3.TopAppBarState
70+ import androidx.compose.material3.pulltorefresh.PullToRefreshBox
71+ import androidx.compose.material3.pulltorefresh.PullToRefreshDefaults.Indicator
72+ import androidx.compose.material3.pulltorefresh.PullToRefreshState
73+ import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState
7074import androidx.compose.material3.rememberTopAppBarState
7175import androidx.compose.runtime.Composable
7276import androidx.compose.runtime.LaunchedEffect
@@ -110,8 +114,6 @@ import com.example.jetnews.ui.utils.BookmarkButton
110114import com.example.jetnews.ui.utils.FavoriteButton
111115import com.example.jetnews.ui.utils.ShareButton
112116import com.example.jetnews.ui.utils.TextSettingsButton
113- import com.google.accompanist.swiperefresh.SwipeRefresh
114- import com.google.accompanist.swiperefresh.rememberSwipeRefreshState
115117import kotlinx.coroutines.currentCoroutineContext
116118import kotlinx.coroutines.isActive
117119import kotlinx.coroutines.runBlocking
@@ -306,6 +308,7 @@ private fun HomeScreenWithList(
306308 val contentModifier = Modifier .nestedScroll(scrollBehavior.nestedScrollConnection)
307309
308310 LoadingContent (
311+ modifier = Modifier .padding(innerPadding),
309312 empty = when (uiState) {
310313 is HomeUiState .HasPosts -> false
311314 is HomeUiState .NoPosts -> uiState.isLoading
@@ -317,12 +320,15 @@ private fun HomeScreenWithList(
317320 when (uiState) {
318321 is HomeUiState .HasPosts ->
319322 hasPostsContent(uiState, innerPadding, contentModifier)
323+
320324 is HomeUiState .NoPosts -> {
321325 if (uiState.errorMessages.isEmpty()) {
322326 // if there are no posts, and no error, let the user refresh manually
323327 TextButton (
324328 onClick = onRefreshPosts,
325- modifier.padding(innerPadding).fillMaxSize()
329+ modifier
330+ .padding(innerPadding)
331+ .fillMaxSize()
326332 ) {
327333 Text (
328334 stringResource(id = R .string.home_tap_to_load_content),
@@ -383,21 +389,34 @@ private fun HomeScreenWithList(
383389 * @param onRefresh (event) event to request refresh
384390 * @param content (slot) the main content to show
385391 */
392+ @OptIn(ExperimentalMaterial3Api ::class )
386393@Composable
387394private fun LoadingContent (
388395 empty : Boolean ,
389396 emptyContent : @Composable () -> Unit ,
390397 loading : Boolean ,
391398 onRefresh : () -> Unit ,
392- content : @Composable () -> Unit
399+ content : @Composable () -> Unit ,
400+ modifier : Modifier = Modifier
393401) {
394402 if (empty) {
395403 emptyContent()
396404 } else {
397- SwipeRefresh (
398- state = rememberSwipeRefreshState(loading),
405+ val refreshState = rememberPullToRefreshState()
406+ PullToRefreshBox (
407+ isRefreshing = loading,
399408 onRefresh = onRefresh,
400- content = content,
409+ content = { content() },
410+ state = refreshState,
411+ indicator = {
412+ Indicator (
413+ modifier = modifier
414+ .align(Alignment .TopCenter )
415+ .padding(),
416+ isRefreshing = loading,
417+ state = refreshState
418+ )
419+ }
401420 )
402421 }
403422}
0 commit comments