Skip to content

Instantly share code, notes, and snippets.

@bmc08gt
Last active December 4, 2023 14:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bmc08gt/5fafd5bc888fccbd63cc4bb3a6479494 to your computer and use it in GitHub Desktop.
Save bmc08gt/5fafd5bc888fccbd63cc4bb3a6479494 to your computer and use it in GitHub Desktop.
Parent shared component with own VM
@Composable
fun ActionMenuContentDecorator(
modifier: Modifier = Modifier,
viewModel: ActionMenuViewModel = hiltViewModel(),
content: @Composable () -> Unit, // A
// content: @Composable (PaddingValues) -> Unit, // B
) {
val state by viewModel.stateFlow.collectAsStateWithLifecycle()
// some parent container type (Scaffold, ModalBottomSheetLayout, etc.)
// or lay things out with Column/Row/Box/Subcompose/Lookahead/etc
Scaffold(
modifier = modifier,
topBar = {
YourActionElements(
modifier = Modifier.windowInsetsPadding(WindowInsets.statusBars),
state = state,
dispatch = viewModel::dispatchEvent
)
}
) { padding ->
// either expose content Padding to child or hide it
// A)
// Box(modifier = Modifier.padding(padding) {
// content()
// }
//
// or B
// content(padding)
}
@Composable
fun SomeScreen(
viewModel: SomeScreenViewModel = hiltViewModel(),
) {
ActionMenuContentDecorator(
modifier = Modifier.fillMaxSize(),
) {
// your screen content
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment