Use TopAppBar scrollBehaviour in TimelineTab and FeedTab

This commit is contained in:
Shinokuni 2024-06-30 17:23:10 +02:00
parent b1e8f25c6c
commit a98ef5c449
4 changed files with 22 additions and 2 deletions

View File

@ -21,6 +21,8 @@ import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.rememberTopAppBarState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
@ -28,6 +30,7 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.rememberVectorPainter
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalHapticFeedback
import androidx.compose.ui.platform.LocalUriHandler
@ -71,6 +74,7 @@ object FeedTab : Tab {
val state by viewModel.feedsState.collectAsStateWithLifecycle()
val snackbarHostState = remember { SnackbarHostState() }
val topAppBarScrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
LaunchedEffect(state.exception) {
if (state.exception != null) {
@ -188,7 +192,8 @@ object FeedTab : Tab {
contentDescription = null
)
}
}
},
scrollBehavior = topAppBarScrollBehavior
)
},
floatingActionButton = {
@ -226,6 +231,7 @@ object FeedTab : Tab {
modifier = Modifier
.fillMaxSize()
.padding(paddingValues)
.nestedScroll(topAppBarScrollBehavior.nestedScrollConnection)
) {
when (state.foldersAndFeeds) {
is FolderAndFeedsState.LoadedState -> {

View File

@ -3,8 +3,12 @@ package com.readrops.app.compose.home
import android.annotation.SuppressLint
import androidx.activity.compose.BackHandler
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.WindowInsetsSides
import androidx.compose.foundation.layout.consumeWindowInsets
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.navigationBars
import androidx.compose.foundation.layout.only
import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.AccountCircle
@ -37,6 +41,8 @@ class HomeScreen : AndroidScreen() {
override fun Content() {
val navigator = LocalNavigator.currentOrThrow
val scaffoldInsets = WindowInsets.navigationBars.only(WindowInsetsSides.Horizontal)
TabNavigator(
tab = TimelineTab
) { tabNavigator ->
@ -93,6 +99,7 @@ class HomeScreen : AndroidScreen() {
)
}
},
contentWindowInsets = scaffoldInsets
) { paddingValues ->
Box(
modifier = Modifier

View File

@ -4,6 +4,7 @@ import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.statusBarsPadding
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@ -38,6 +39,7 @@ object MoreTab : Tab {
Column(
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier.fillMaxSize()
.statusBarsPadding()
) {
LargeSpacer()

View File

@ -25,9 +25,11 @@ import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.SnackbarResult
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.pulltorefresh.PullToRefreshContainer
import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState
import androidx.compose.material3.rememberDrawerState
import androidx.compose.material3.rememberTopAppBarState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
@ -85,6 +87,7 @@ object TimelineTab : Tab {
val lazyListState = rememberLazyListState()
val pullToRefreshState = rememberPullToRefreshState()
val snackbarHostState = remember { SnackbarHostState() }
val topAppBarScrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
LaunchedEffect(state.isRefreshing) {
if (state.isRefreshing) {
@ -280,7 +283,8 @@ object TimelineTab : Tab {
contentDescription = null
)
}
}
},
scrollBehavior = topAppBarScrollBehavior
)
},
snackbarHost = { SnackbarHost(snackbarHostState) },
@ -306,6 +310,7 @@ object TimelineTab : Tab {
.padding(paddingValues)
.fillMaxSize()
.nestedScroll(pullToRefreshState.nestedScrollConnection)
.nestedScroll(topAppBarScrollBehavior.nestedScrollConnection)
) {
when {
state.displayRefreshScreen -> RefreshScreen(