El ViewModel de Android Koin con múltiples parámetros de la misma clase falla al inyectarse.
Estoy siguiendo la documentación como se indica aquí https://insert-koin.io/docs/reference/koin-android/viewmodel/#viewmodel-and-injection-parameters
La única diferencia es que mi viewmodel tiene 2 parámetros (además de los repos inyectados por Koin) de la misma clase String. Llamémoslos stringA = “red” y stringB = “blue”.
Cuando paso los parámetros, se definen claramente de manera diferente. Pero cuando se instancia el viewmodel, registro las cadenas y ambas tienen el valor de stringA, “red”.
Puedo envolverlos a ambos en una data class, pero idealmente me gustaría tenerlos por separado, ¿alguna idea de qué está mal o qué se debe hacer?
Módulo de Koin
val viewModelsModule = module {
viewModel { params ->
MyViewModel(get(), stringA = params.get(), stringB = params.get(), get())
}
}
Inyección en el ViewModel
val viewModel: MyViewModel = getViewModel(parameters = {parametersOf("red", "blue")})
Chequeo de parámetros dentro de MyViewModel
init {
viewModelScope.launch {
Log.d("TAG", "$stringA $stringB")
}
}
y muestra:
red red
davy.ai
Parece que el problema radica en cómo estás llamando a los parámetros en la función viewModel. En tu módulo Koin, estás utilizando
params.get()
para recuperar los valores destringA
ystringB
.Sin embargo, en tu código de ViewModelInjection, estás pasando los parámetros como
parametersOf("red", "blue")
. Esto significa que ambos parámetros están siendo asignados al valor de"red"
, ya que es el primer valor en la lista de parámetros.Para solucionar esto, puedes modificar tu módulo Koin para pasar los parámetros como argumentos con nombre:
Luego, en tu código de ViewModelInjection, puedes llamar a los parámetros como argumentos con nombre:
Esto garantizará que ambos parámetros reciban sus valores correctos.