Usually, no. Keep the `ViewModel` at the stateful screen boundary. Collect its state there, send only the data needed for rendering to the child, and pass events down as lambdas. ```kotlin @Composable fun ProfileScreen(viewModel: ProfileViewModel) { val state by viewModel.uiState.collectAsStateWithLifecycle() ProfileContent( state = state, onSave = viewModel::save, onRetry = viewModel::retry, ) } @Composable fun ProfileContent( state: ProfileUiState, onSave: () -> Unit, onRetry: () -> Unit, )...
Scanned 9/5/2026
Install to Claude Code
npx -y skills add HoangNguyen0403/agent-skills-standard --skill android-compose --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Android Compose?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/hoangnguyen0403-android-compose-42896333)More formats (shields.io, HTML) on the badges page.
# Passing a ViewModel to a child composable
Usually, no. Keep the `ViewModel` at the stateful screen boundary. Collect its state there, send only the data needed for rendering to the child, and pass events down as lambdas.
```kotlin
@Composable
fun ProfileScreen(viewModel: ProfileViewModel) {
val state by viewModel.uiState.collectAsStateWithLifecycle()
ProfileContent(
state = state,
onSave = viewModel::save,
onRetry = viewModel::retry,
)
}
@Composable
fun ProfileContent(
state: ProfileUiState,
onSave: () -> Unit,
onRetry: () -> Unit,
) {
// Render state and invoke callbacks; do not know about the ViewModel.
}
```
This keeps the content composable stateless, reusable, and easy to preview/test. It also limits recomposition inputs and prevents the child from becoming coupled to the ViewModel’s API or lifecycle. A deeper composable should receive stable/immutable UI data and event callbacks, not a `ViewModel` or other state owner.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!