首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将viewModel注入@Composable

将viewModel注入@Composable
EN

Stack Overflow用户
提问于 2021-05-16 16:40:10
回答 3查看 3.2K关注 0票数 10

我的ProfileScreen有viewModel。

代码语言:javascript
复制
@Composable
fun ProfileScreen() {
    val viewModel: ProfileViewModel = viewModel()
    ...
}

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

val viewModel: ProfileViewModel = viewModel()

Android抛出错误。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-06-11 11:30:09

或者在重组合调用之间使用remember()保存实例ViewModel

代码语言:javascript
复制
@Composable
fun ProfileScreen() {
    val viewModel = remember { ProfileViewModel() }
    ...
}

此外,rememberSaveable允许在重新创建活动之间的保存状态(也称为数据类)。

票数 2
EN

Stack Overflow用户

发布于 2021-05-16 17:09:23

当你摧毁可合成的时候,你的viewModel就会被摧毁,它可以存活下来,但是一旦你的可合成被摧毁,它就会被摧毁。

您可以做的是在一个比可组合的viewModel更长的作用域中创建ProfileScreen,然后将viewModel作为参数传递给它。

像这样的东西应该管用。

代码语言:javascript
复制
@Composable 
fun MainScreen() {
     val vModel : ProfileViewModel = viewModel()
     ....
     ProfileScreen(vModel)
}
票数 3
EN

Stack Overflow用户

发布于 2021-09-22 09:03:32

如果您想使用Koin将视图模型注入到可组合中,那么您应该遵循文档中描述的内容。

代码语言:javascript
复制
getViewModel() - fetch instance

通过调用该方法,Koin将搜索该视图模型并提供一个实例。

下面是在我的应用程序中注入视图模型的一个例子。

代码语言:javascript
复制
fun ManualControlScreen(
  onDrawerClick: () -> Unit,
  viewModel: ManualControlViewModel = getViewModel<ManualControlViewModel>()
) {
   // Your composable UI
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67559205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档