首页 > 解决方案 > 将 viewModel 注入@Composable

问题描述

我的 ProfileScreen 有 viewModel。

@Composable
fun ProfileScreen() {
    val viewModel: ProfileViewModel = viewModel()
    ...
}

每次我调用 ProfileScreen 时,都会创建新的 viewModel。我怎样才能为我的 ProfileScreen 创建一个 viewModel 实例。我尝试在https://insert-koin.io/docs/reference/koin-android/compose/之后注入 viewModel但是当我尝试

val viewModel: ProfileViewModel = viewModel()

Android Studio 抛出错误。

标签: androidkotlindependency-injectionandroid-jetpack-composekoin

解决方案


viewModel每当您销毁可组合物时,您都会被销毁,它可以在重新组合后幸存下来,但是一旦您的可组合物被销毁,它就会被销毁。

您可以做的是viewModel在一个比 ProfileScreen 组合寿命更长的范围内创建,然后将viewModelas 参数传递给它。

像这样的东西应该工作。

@Composable 
fun MainScreen() {
     val vModel : ProfileViewModel = viewModel()
     ....
     ProfileScreen(vModel)
}

推荐阅读