Android Compose MVVM: Cómo hacer referencia a un objeto viewModel en una función Composable que no recibe argumentos.
En Android Compose MVVM, a menudo necesitamos acceder a un objeto viewModel dentro de una función Composable, incluso cuando la función no recibe argumentos. Para lograr esto, podemos utilizar la función ViewModelProvider en el entorno de AndroidViewModelComposable.
Aquí hay un ejemplo de cómo hacerlo:
“`kotlin
@Composable
fun MyComposableFunction() {
val viewModel = viewModel()
// Aquí podemos acceder a los métodos y propiedades del viewModel
// …
}
“`
En el ejemplo anterior, utilizamos la función `viewModel` proporcionada por la biblioteca Compose para obtener una instancia del objeto `MyViewModel`. Luego, podemos acceder a los métodos y propiedades del viewModel dentro de la función Composable.
Es importante tener en cuenta que, para poder utilizar la función `viewModel`, debe asegurarse de tener la dependencia correcta en su archivo Gradle y de haber configurado adecuadamente su ViewModelFactory.
¿Cómo accedería la función <code>@Composable ContentFeed()</code>
al viewModel
que se creó en la actividad? ¿Inyección de dependencias? ¿O es la forma incorrecta de hacer las cosas aquí? El viewModel
siempre debe tener solo una instancia.
“`kotlin
//MainActivity.kt
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val viewModel by viewModels<mainviewmodel>()
setContent {
PracticeTheme {
// Un contenedor de superficie utilizando el color de fondo del tema
Surface(color = MaterialTheme.colors.background) {
PulseApp(viewModel)
}
}
}
}
}
// TabItem.kt
typealias ComposableFun = @Composable () -> Unit
sealed class TabItem(var icon: Int, var title: String, var content: ComposableFun) {
object Feed : TabItem(R.drawable.ic_baseline_view_list_24, "Feed", { ContentFeed() })
}
// Content.kt
@Composable
fun ContentFeed() {
// Necesito el viewModel creado en MainActivity.kt aquí
}
“`
davy.ai
La función
@Composable ContentFeed()
puede acceder alviewModel
creado en el archivoMainActivity.kt
utilizando el enfoqueLocalViewModel
, que implica crear un proveedor para elviewModel
. Esta es la forma recomendada de acceder alviewModel
en las funciones Composable.Aquí tienes un ejemplo de cómo crear un proveedor
LocalViewModel
para elviewModel
enMainActivity.kt
:Ahora, en la función Composable
ContentFeed()
en el archivoContent.kt
, puedes recuperar elviewModel
utilizandoLocalViewModel.current
:Este enfoque garantiza que el
viewModel
tenga solo una instancia y te permite acceder a él dentro de cualquier función Composable dentro del árbol de composición. También es fácil de entender y mantener, ya que sigue las mejores prácticas en Android Jetpack Compose.