Use TopAppBar scrollBehaviour in TimelineTab and FeedTab
This commit is contained in:
parent
b1e8f25c6c
commit
a98ef5c449
@ -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 -> {
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
|
||||
|
@ -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(
|
||||
|
Loading…
x
Reference in New Issue
Block a user