1
0
mirror of https://github.com/AllanWang/Frost-for-Facebook.git synced 2024-09-19 15:11:42 +02:00

Link nested scrolling connection

This commit is contained in:
Allan Wang 2023-06-22 23:43:44 -07:00
parent 1d14386d86
commit f5b003298e
No known key found for this signature in database
GPG Key ID: C93E3F9C679D7A56
2 changed files with 21 additions and 10 deletions

View File

@ -32,6 +32,8 @@ import androidx.compose.material3.NavigationDrawerItemDefaults
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.material3.rememberDrawerState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
@ -41,6 +43,7 @@ import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
@ -50,6 +53,7 @@ import com.pitchedapps.frost.facebook.tab
import com.pitchedapps.frost.tabselector.TabData
import kotlinx.coroutines.launch
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun MainScreenContainer(
modifier: Modifier = Modifier,
@ -59,15 +63,17 @@ fun MainScreenContainer(
navItems: List<TabData>,
navSelectedIndex: Int,
navOnSelect: (Int) -> Unit,
content: @Composable (PaddingValues) -> Unit,
content: @Composable (PaddingValues, NestedScrollConnection) -> Unit,
) {
val drawerState = rememberDrawerState(DrawerValue.Closed)
val scope = rememberCoroutineScope()
val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior()
ModalNavigationDrawer(
modifier = modifier,
drawerState = drawerState,
gesturesEnabled = false,
drawerContent = {
MainModalDrawerContent(
items = drawerItems,
@ -85,7 +91,7 @@ fun MainScreenContainer(
) {
Scaffold(
containerColor = Color.Transparent,
topBar = { MainTopBar() },
topBar = { MainTopBar(scrollBehavior = scrollBehavior) },
bottomBar = {
MainBottomBar(
selectedIndex = navSelectedIndex,
@ -93,7 +99,7 @@ fun MainScreenContainer(
onSelect = { navOnSelect(it) },
)
},
content = content,
content = { paddingValues -> content(paddingValues, scrollBehavior.nestedScrollConnection) },
)
}
}
@ -129,12 +135,15 @@ private fun MainModalDrawerContent(
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun MainTopBar(modifier: Modifier = Modifier) {
TopAppBar(modifier = modifier, title = { Text(text = "Title") })
private fun MainTopBar(
modifier: Modifier = Modifier,
scrollBehavior: TopAppBarScrollBehavior? = null
) {
TopAppBar(modifier = modifier, scrollBehavior = scrollBehavior, title = { Text(text = "Title") })
}
@Composable
fun MainBottomBar(
private fun MainBottomBar(
modifier: Modifier = Modifier,
selectedIndex: Int,
items: List<TabData>,
@ -161,7 +170,7 @@ fun MainBottomBar(
@Composable
@Preview
fun MainScreenContainerPreview() {
private fun MainScreenContainerPreview() {
val context = LocalContext.current
val drawerItems = remember { FbItem.values().map { it.tab(context) } }
@ -180,6 +189,7 @@ fun MainScreenContainerPreview() {
navItems = navItems,
navSelectedIndex = navSelectedIndex,
navOnSelect = { navSelectedIndex = it },
) {}
) { _, _ ->
}
}
}

View File

@ -34,6 +34,7 @@ import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.lifecycle.viewmodel.compose.viewModel
import com.pitchedapps.frost.compose.webview.FrostWebCompose
import com.pitchedapps.frost.ext.WebTargetId
@ -59,9 +60,9 @@ fun MainScreenWebView(modifier: Modifier = Modifier) {
navItems = homeTabs.map { it.toTab() },
navSelectedIndex = selectedHomeTab?.let { id -> homeTabs.indexOfFirst { it.id == id } } ?: -1,
navOnSelect = { vm.useCases.homeTabs.selectHomeTab((homeTabs[it].id)) },
) { paddingValues ->
) { paddingValues, nestedScrollConnection ->
MainScreenWebContainer(
modifier = Modifier.padding(paddingValues),
modifier = Modifier.padding(paddingValues).nestedScroll(nestedScrollConnection),
selectedTab = selectedHomeTab,
items = homeTabs,
store = vm.store,