1. Arquitectura Flutter + backend .NET 8 con Novita AI

1. Arquitectura Flutter + backend .NET 8 con Novita AI

Actualizado: 20 de febrero de 2026.

Este capítulo define la arquitectura del curso para que entiendas cómo viajan los datos desde la app Flutter hasta Novita AI y cómo vuelve el resultado final por webhook.

Repositorio oficial del curso: curso-flutter-net8-novita-ai en GitHub.

Prerrequisitos

  1. Tener clonado o disponible codigo/ de esta serie.
  2. Contar con Firebase y Novita configurados para pruebas.
  3. Haber completado el capítulo anterior del curso.

Qué vas a construir

  1. App Flutter con login Google.
  2. API .NET 8 autenticada con Firebase.
  3. Generación asíncrona de imágenes en Novita.
  4. Persistencia en Firestore y archivos en Firebase Storage.

Componentes principales

  1. app/:
    • Pantalla de creación de invitación.
    • Subida de imagen.
    • Consulta de estado por Firestore.
  2. backend/InvitaIA.Api/:
    • InvitationsController para creación y consulta.
    • NovitaService para integración IA.
    • NovitaWebhookController para callback asíncrono.
  3. Firebase:
    • Auth (token del usuario).
    • Firestore (users/{uid}/public_invitations).
    • Storage (uploads/{uid}/{file}).
  4. Novita AI:
    • txt2img e img2img.
    • img2prompt.
    • chat/completions para adaptar prompt.
    • task-result + webhook.

Flujo E2E

  1. Flutter obtiene token de Firebase Auth.
  2. Flutter llama POST /api/invitations/create.
  3. Backend manda petición asíncrona a Novita (task_id).
  4. Novita responde por webhook.
  5. Backend descarga salida y sube a Storage.
  6. Firestore actualiza status, previewUrl, finalUrl.
  7. Flutter muestra resultado por stream/listado.

Validación rápida de arquitectura

cd codigo/backend
 dotnet build InvitaIA.Api.sln

# revisar endpoints disponibles
rg -n "\[Http(Post|Get|Put|Delete)" InvitaIA.Api/Controllers -S

Troubleshooting

  1. Si no ves cambios de estado en app: valida que webhook llegue a /api/webhooks/novita.
  2. Si create devuelve 401: revisa token Firebase en header Authorization.
  3. Si Firestore no guarda: valida Firebase:ProjectId y permisos de cuenta de servicio.

FAQ corta

¿Por qué usar webhook y no esperar la respuesta en la API?

Porque la generación de imagen es asíncrona y puede tardar más que una request HTTP normal.

¿Dónde vive la lógica de negocio principal?

En InvitationService y NovitaTaskWorker del backend.

¿La app consulta directamente Novita?

No. La app usa el backend como capa de dominio y seguridad.

Fuente verificada

  • Código del curso:
    • codigo/backend/InvitaIA.Api/Controllers/InvitationsController.cs
    • codigo/backend/InvitaIA.Api/Controllers/NovitaWebhookController.cs
    • codigo/backend/InvitaIA.Api/Workers/NovitaTaskWorker.cs
    • codigo/app/lib/services/api_service.dart
  • Documentación oficial Novita:

Share this content:

Curso Flutter y .NET 8 con Novita AI: índice completo paso a paso

. Curso Flutter + .NET 8 + Novita AI: índice completo . Configurar entorno .NET 8 + Flutter + Firebase + Novita AI

Comentarios

Aún no hay comentarios. ¿Por qué no comienzas el debate?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.