You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Composable中初始化带参数的Koin ViewModel

你的Koin模块定义本身符合规范,前两个参数会通过get()自动注入你已注册的两个Repository单例实例,后三个为运行时动态传递的参数,在Compose中使用时按以下步骤操作即可:

  1. 首先确认Application中已加载全部Koin模块,避免出现依赖找不到的异常
class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        startKoin {
            androidContext(this@MyApp)
            // 按顺序注册所有依赖模块
            modules(firstRepositoryModule, secondRepositoryModule, viewModelModule)
        }
    }
}
  1. 在Composable函数中获取ViewModel实例时,通过parametersOf传递三个动态参数即可
@Composable
fun MyScreen(
    id: Int,
    userName: String,
    email: String
) {
    // 传入运行时参数获取ViewModel实例
    val viewModel: MyViewModel = viewModel(
        parameters = { parametersOf(id, userName, email) }
    )
    // 后续直接使用viewModel执行业务逻辑
}

补充说明

如果是Navigation Compose场景,参数来自导航路由传参,只需要先从导航返回栈取出对应参数再传入即可,示例:

composable("user_detail/{id}/{userName}/{email}") { backStackEntry ->
    val id = backStackEntry.arguments?.getInt("id") ?: 0
    val userName = backStackEntry.arguments?.getString("userName").orEmpty()
    val email = backStackEntry.arguments?.getString("email").orEmpty()
    val viewModel: MyViewModel = viewModel(
        parameters = { parametersOf(id, userName, email) }
    )
    UserDetailScreen(viewModel)
}

注意需保证parametersOf中传入的参数顺序、类型和你在viewModel模块定义的lambda参数完全一致,否则会出现参数不匹配的注入异常。

内容的提问来源于stack exchange,提问作者crossdeath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 05:39:03