how can we pass parameter to viewModel in jetpack compose?

这是我的组合家具

@Composable
fun UsersList() {
  val myViewModel: MyViewModel = viewModel("db2name") // pass param like this
}

这是viewModel

class MyViewModel(private val dbname) : ViewModel() {
    private val users: MutableLiveData<List<User>> by lazy {
        MutableLiveData<List<User>>().also {
            loadUsers()
        }
    }

    fun getUsers(): LiveData<List<User>> {
        return users
    }

    private fun loadUsers() {
        // Do an asynchronous operation to fetch users.
    }
}

推荐答案

您需要创建一个工厂,将动态参数传递给ViewModel,如下所示:

class MyViewModelFactory(private val dbname: String) :
    ViewModelProvider.NewInstanceFactory() {
    override fun <T : ViewModel?> create(modelClass: Class<T>): T = MyViewModel(dbname) as T
}

然后在可组合函数中使用您的工厂:

@Composable
fun UsersList() {
    val myViewModel: MyViewModel =
        viewModel(factory = MyViewModelFactory("db2name")) // pass param like this
}

and now you have access to dbname parameter in your ViewModel:

class MyViewModel(private val dbname) : ViewModel() {
    // ...rest of the viewModel logics here
}

Kotlin相关问答推荐

判断字符串是否除了.&" ",","@""""

升级使用jOOQ Gradle插件生成代码失败

Android Studio中的只读集合不支持操作失败的原因是什么?

kotlin 父类具有依赖于抽象变量的变量

如何在 Spring Boot 3 中为内部类提供运行时提示

Kotlin 中获取类简单名称的最佳实践

如何在 Android 的 Fragment 中使用 setUserVisibleHint

Kotlin 使用迭代索引过滤 lambda 数组

错误:cannot find symbol import com.gourav.news.databinding.ActivityDetailBindingImpl;

具有多个不同类型来源的 LiveData

在 SplashActivity 中显示的 Firebase 应用内消息.如何在 MainActivity 中显示它?

jetpack compose 将参数传递给 viewModel

使用最新的 com.jakewharton.rxbinding3:rxbinding:3.0.0-alpha2 库时未找到 RxTextView 和其他小部件

无法在 kotlin android 中以编程方式禁用 EditText

runOnUiThread 没有调用

Android Room - error: Cannot figure out how to save this field into database

RecyclerView SnapHelper无法显示第一个/最后一个元素

判断EditText是否为空kotlin android

用 kotlin 学习 Android MVVM 架构组件

如何在 spring-boot Web 客户端中发送请求正文?