Archivar Todos en Aplicación de Tareas

Clase 15 de 28Curso de Patrones MVVM en iOS

Resumen

El desarrollo de aplicaciones se trata de proporcionar funcionalidad y mejores experiencias al usuario. Esta clase te guiará sobre cómo implementar una característica esencial: el archivado de tareas en una aplicación de lista de pendientes.

¿Qué cambios debes hacer en el ViewModel?

El 'ViewModel' es el encargado de manejar la lógica de negocio de nuestra aplicación. Para archivar una tarea o "to-do", es esencial implementar la función archiveTodo. Aquí los pasos para hacerlo:

  1. Creación de la Función: Se inicia agregando la función archiveTodo en el ViewModel.
   fun archiveTodo() {
       // Verificamos si el ID del todo existe
       val index = getTodoIndex(todo)
       if (index < 0) return // Si el elemento no existe, salir de la función

       // Modificamos el estado a 'archivado'
       todos[index].isArchived = true
       saveData() // Guardamos los cambios
   }
  1. Verificación de Existencia: La función busca el índice del "to-do" a través de getTodoIndex. Si no encuentra, se detiene la ejecución.

  2. Modificación del Estado: Se cambia el atributo isArchive del "to-do" a true. Esto indica que el ítem está archivado.

  3. Guardar Cambios: Se utiliza saveData() para persistir esta modificación en el contexto de Core Data.

¿Dónde implementamos la función de archivar en la interfaz?

La interacción de la interfaz de usuario con nuestra lógica es crucial para integrar estas funcionalidades sin problemas.

  1. Referencia de Botón: Dentro de ToDoPreviewView, localizamos el botón de archivar.

  2. Llamado a la Función: Usamos el ViewModel para llamar a archiveTodo cuando se presiona el botón.

   // En el archivo ToDoPreviewView.swift
   Button(action: {
       viewModel.archiveTodo()
       // Limpiamos el todo seleccionado y cerramos la vista
       selectedTodo = nil
   }) {
       Text("Archivar")
   }

¿Cómo mostrar la lista de tareas archivadas?

Basta con archivar los "to-dos". Ahora, necesitamos un procedimiento para mostrar una lista de tareas archivadas que proporcione valor agregado al usuario.

  1. Creación de una Variable para Archivos: En la vista ToDoArchiveListView, define una colección filtrada de tareas archivadas.
   let archivedTodos: [TodoEntity] = viewModel.todos.filter { $0.isArchived }
  1. Mostrar en la Vista: Utiliza un ciclo ForEach para iterar y mostrar solo los elementos cuya propiedad isArchive sea true.
   ScrollView {
       if !archivedTodos.isEmpty {
           ForEach(archivedTodos, id: \.id) { todo in
               Text(todo.title)
               // Se puede mejorar más el diseño, con detalles del ítem
           }
       } else {
           Text("No hay tareas archivadas.")
       }
   }
  1. Interfaz para Vacíos: Proporciona una vista alternativa en caso de que no haya "to-dos" archivados.

¿Qué detalle de diseño se debe considerar para los elementos archivados?

El diseño y la presentación pueden mejorar significativamente la experiencia del usuario. Aquí, respondemos al cómo y qué del diseño de estas tareas archivadas.

  1. Diseño en ItemView: Dentro de los elementos de la lista, agrega un HStack o VStack para mostrar la información como el título y la fecha.
   VStack(alignment: .leading) {
       Text(todo.title)
           .font(.headline)
       Text(todo.date, formatter: DateFormatter.short)
           .font(.subheadline)
   }
   .padding(.vertical, 4)
  1. Íconos de Interacción: Al final de cada elemento, añade iconos para interactuar, Eliminar el "to-do" de manera definitiva o restaurarlo a la lista principal.

La integración de estas características no solo lleva la aplicación al siguiente nivel en términos de funcionalidad sino que también garantiza una mejor experiencia de usuario. Con trabajo técnico, diseño cuidadoso y pruebas continuas mejoras, puedes proporcionar una solución viable y robusta. ¡Mantente aprendiendo y no dudes en añadir nuevos desafíos a tus proyectos!