En este enlace se le indica que use viewModel() en cualquier composición y en una actividad, obtendremos el mismo objeto al llamar a viewModel() . Aunque se indica que use viewModel() dentro de un componible, también pude usarlo en setContent{} (fuera de cualquier componible).
En este enlace se le indica usar viewModels() en una actividad o un fragmento para obtener el objeto de una clase que extiende ViewModel .
En ambos casos, estamos obteniendo un objeto de una clase que extiende ViewModel . Entonces, ¿por qué necesitamos usar dos enfoques diferentes ( viewModel() y viewModels() )?
Si pregunta si puede usar solo viewModel sin viewModels en Compose, la respuesta es sí. Pero en algunos casos es más conveniente usar ambos.
viewModels pertenece al paquete androidx.activity , es una extensión de ComponentActivity y no tiene nada que ver con Compose. Se usó en Android basado en vistas y aún se puede usar con Compose cuando necesita inicializar o actualizar su modelo de vista con algunas devoluciones de llamadas específicas de la actividad.
A su vez, viewModel es parte de Compose y le permite crear/acceder fácilmente a un modelo de vista desde cualquier Composable.
Puede llamarlo directamente dentro setContent ya que ya pertenece al ámbito componible, pero no se sentiría tan cómodo llamándolo en cualquier otro lugar de la actividad, como en onActivityResult (sé que está en desuso, es solo un ejemplo). Todavía puede hacerlo como se muestra en esta respuesta , pero en algunos casos, los viewModels pueden ser más fáciles de usar.