Eliminar Transacciones con Firebase en Flutter

Clase 21 de 30Curso de Flutter con Firebase

Resumen

La gestión de transacciones en aplicaciones modernas requiere un enfoque estructurado y eficiente. Implementar operaciones CRUD (Crear, Leer, Actualizar, Eliminar) con Firebase proporciona una base sólida para aplicaciones escalables. En esta ocasión, nos enfocaremos en completar nuestra funcionalidad de eliminación de transacciones, un componente esencial para cualquier sistema de gestión de datos.

¿Cómo implementar la funcionalidad de eliminación en Firebase?

Para implementar correctamente la eliminación de transacciones en nuestra aplicación, necesitamos crear una estructura que permita identificar y eliminar registros específicos. Este proceso implica tres componentes principales: el repositorio, los eventos y el bloque de modelo.

Comenzaremos creando la funcionalidad en nuestro archivo de repositorio:

async deleteTransaction(docId) {
  await firestore.collection('transactures').doc(docId).delete();
}

Esta función es asíncrona porque debe esperar la respuesta de Firebase. El parámetro docId es crucial, ya que representa la llave única que identifica la transacción específica que deseamos eliminar. La función utiliza la instancia de Firestore para acceder a nuestra colección 'transactures', busca el documento con el ID correspondiente y ejecuta el método delete() proporcionado por Firebase.

¿Cómo manejar los eventos para la eliminación?

Los eventos son fundamentales para mantener la comunicación entre los diferentes componentes de nuestra aplicación. Para la funcionalidad de eliminación, necesitamos crear un evento específico:

class DeleteTransacture {
  constructor(id) {
    this.id = id;
  }
}

A diferencia del evento para agregar transacciones, este evento solo necesita recibir el ID de la transacción que se eliminará, no toda la información de la transacción. Esta es una optimización importante, ya que transmitimos únicamente los datos necesarios.

¿Cómo integrar la eliminación en el bloque de modelo?

El bloque de modelo (o "blog") es donde coordinamos los eventos y estados de nuestra aplicación. Para implementar la eliminación, debemos:

async deleteTransacture(event) {
  try {
    await repository.deleteTransaction(event.id);
    const transactions = await repository.fetch();
    emit(new TransactionLoaded(transactions));
  } catch (error) {
    emit(new Error("Error deleting transaction"));
  }
}

En este método:

  1. Llamamos a la función de eliminación del repositorio, pasando el ID del evento.
  2. Actualizamos la lista de transacciones después de la eliminación para reflejar el cambio.
  3. Emitimos un estado de "transacciones cargadas" con la lista actualizada.
  4. Manejamos posibles errores con un mensaje personalizado.

Este enfoque garantiza que después de eliminar una transacción, nuestra interfaz de usuario se actualice automáticamente para reflejar el cambio, proporcionando una experiencia fluida al usuario.

¿Qué funcionalidades completan nuestro sistema CRUD?

Con la implementación de la eliminación de transacciones, hemos completado las tres funcionalidades principales de nuestro sistema:

  1. Fetch (Leer): Recupera y muestra todas las transacciones almacenadas.
  2. Add (Crear): Permite agregar nuevas transacciones a nuestra colección.
  3. Delete (Eliminar): Permite eliminar transacciones específicas mediante su ID único.

Estas operaciones constituyen la base de cualquier sistema de gestión de datos efectivo. La estructura que hemos implementado sigue el patrón de arquitectura limpia, separando claramente las responsabilidades entre el repositorio (acceso a datos), los eventos (comunicación) y el bloque de modelo (lógica de negocio).

La implementación de estas funcionalidades nos proporciona un sistema robusto para gestionar transacciones, con código mantenible y escalable. El siguiente paso sería realizar ajustes en nuestro archivo principal para integrar completamente estas funcionalidades en nuestra aplicación.

¿Has implementado sistemas similares con Firebase? Comparte tus experiencias y cualquier optimización que hayas descubierto en la sección de comentarios.