
ViewModel con data classes
En muchas ocasiones, vamos a quere crear ventanas que sirven para rellenar los datos de una determinada entidad y al pulsar un botón se guardará en una base de datos. Para este tipo de ventanas vinculadas a una instancia de una entidad, vamos a usar un objeto de una data class como estado del ViewModel.
Cuando queramos modificar algún campo de dicho objeto utilizaremos el método copy de las data classes para modificar solo ese campo.
Ejemplo
Por ejemplo, podemos crear una aplicación para gestionar tareas (Task). Esta aplicación tendrá una ventana CreateTaskScreen (sirve para crear una nueva tarea)
Cada tarea la reprsentaremos con la data class Task
data class Task(val id: Int, val title: String, val description: String)CreateTaskScreen
Primer creamos el ViewModel que gestiona los datos de una tarea
import androidx.lifecycle.ViewModel
import com.example.tasksapp.domain.model.Task
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
class CreateTaskViewModel : ViewModel() {
// Estado mutable que almacena el listado de tareas
private val _task = MutableStateFlow<Task>(
Task(0, "", "")
)
// Version inmutable del estado anterior, es el estado que va a leer el UI
val task: StateFlow<Task> = _task
fun setTitle(title: String) {
_task.value = _task.value.copy(title = title)
}
fun setDescription(description: String) {
_task.value = _task.value.copy(description = description)
}
fun save() {
// TODO Aquí va la lógica para guardar la tarea
// Veremos qué se hace en el próximo tema
}
}Ahora ya podemos usarlo en la ventana CreateTaskScreen
Última actualización
¿Te fue útil?