我现在正在使用 Jetpack Compose。我意识到我可以在可组合项中使用 ViewModel 并在可组合项中初始化视图模型,如下所示:
val myViewModel:MyViewModel = viewModel()
Run Code Online (Sandbox Code Playgroud)
但存在一个问题,即使未显示可组合项,这些视图模型也永远不会被销毁。
例如,我有一个主可组合屏幕,它根据用户交互加载一些其他屏幕,如下所示:
@Composable
fun MainAuthentication(viewModel: MainViewModel) {
val state = viewModel.state.value
val scope = rememberCoroutineScope()
val scaffoldState = rememberScaffoldState()
Scaffold(scaffoldState = scaffoldState)
{
//--------------------(login and sign up button)--------------------//
Row(
modifier = Modifier
.padding(top = 50.dp)
.fillMaxSize(),
verticalAlignment = Alignment.CenterVertically,
) {
if (!state.signUpFormIsVisible && !state.loginFormIsVisible) {
Button(
onClick = {
viewModel.onEvent(event = MainEvent.LoginButtonClick)
},
modifier = Modifier
.padding(10.dp)
.weight(0.5f)
) {
Text(text = stringResource(id = R.string.login))
}
Button(
onClick = { …Run Code Online (Sandbox Code Playgroud)