-
-
Notifications
You must be signed in to change notification settings - Fork 109
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Make it possible to pass Scaffold PaddingValues to CurrentTab() #409
Comments
You can use the following interface and function to be able to pass the PaddingValues: @Composable
fun CurrentTabX(
innerPadding: PaddingValues, snackBarHostState: SnackbarHostState
) {
val tabNavigator = LocalTabNavigator.current
val currentTab = tabNavigator.current as TabX
tabNavigator.saveableState("currentTab") {
currentTab.Content(innerPadding, snackBarHostState)
}
}
interface TabX : Tab {
@Composable
fun Content(
innerPadding: PaddingValues,
snackBarHostState: SnackbarHostState,
)
@Composable
override fun Content() {
error("Called Content without arguments")
}
} Simply inherit from |
If you also want to then add a fade transition between the Tabs you could use: typealias TabTransitionContent = @Composable AnimatedVisibilityScope.(Tab) -> Unit
@Composable
fun TabTransition(
navigator: TabNavigator,
transition: AnimatedContentTransitionScope<Tab>.() -> ContentTransform,
modifier: Modifier = Modifier,
content: TabTransitionContent
) {
AnimatedContent(
targetState = navigator.current,
transitionSpec = transition,
modifier = modifier
) { tab ->
navigator.saveableState("transition", tab) {
content(tab)
}
}
}
@Composable
fun FadeTabTransition(
navigator: TabNavigator,
modifier: Modifier = Modifier,
animationSpec: FiniteAnimationSpec<Float> = spring(stiffness = Spring.StiffnessMediumLow),
content: TabTransitionContent
) {
TabTransition(
navigator = navigator,
modifier = modifier,
content = content,
transition = { fadeIn(animationSpec = animationSpec) togetherWith fadeOut(animationSpec = animationSpec) }
)
} And then call the following for the content of your Scaffold instead of content = { innerPadding ->
FadeTabTransition(it) { tab ->
(tab as TabX).Content(innerPadding, snackBarHostState)
}
}, |
Sorry for the late reply @hristogochev... Looks like a nice solution, thank you! |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
If nesting a
Scaffold
inside aTabNavigator
, thePaddingValues
that are passed to thecontent
lambda of theScaffold
can't be passed toCurrentTab()
. Would be nice to have some official support.The text was updated successfully, but these errors were encountered: