- 0. Curso Flutter + .NET 8 + Novita AI: índice completo
- 1. Arquitectura Flutter + backend .NET 8 con Novita AI
- 2. Configurar entorno .NET 8 + Flutter + Firebase + Novita AI
- 3. Backend .NET 8: Auth Firebase y esqueleto API
- 4. Integrar Novita AI: text-to-image e image-to-image en .NET 8
- 5. Webhook Novita y procesamiento asíncrono
- 6. Firestore, modelos y endpoints de dominio
- 7. Flutter: login Google y configuración API
- 8. Flutter: subida de imagen y creación de invitaciones
- 9. Listado, estado y detalle de invitaciones
- 10. ControlNet completo en backend y Flutter
- 11. LLM con Novita: img2prompt y adaptación de prompts
- 12. Despliegue, checklist final y publicación WordPress
- Bonus 01: vídeo con FFmpeg y flujo opcional
- Bonus 02: importador de modelos Novita a Firestore
- Bonus 03: Prompt Generator y administración básica
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
- Tener clonado o disponible
codigo/de esta serie. - Contar con Firebase y Novita configurados para pruebas.
- Haber completado el capítulo anterior del curso.
Qué vas a construir
- App Flutter con login Google.
- API .NET 8 autenticada con Firebase.
- Generación asíncrona de imágenes en Novita.
- Persistencia en Firestore y archivos en Firebase Storage.
Componentes principales
app/:- Pantalla de creación de invitación.
- Subida de imagen.
- Consulta de estado por Firestore.
backend/InvitaIA.Api/:InvitationsControllerpara creación y consulta.NovitaServicepara integración IA.NovitaWebhookControllerpara callback asíncrono.
- Firebase:
- Auth (token del usuario).
- Firestore (
users/{uid}/public_invitations). - Storage (
uploads/{uid}/{file}).
- Novita AI:
txt2imgeimg2img.img2prompt.chat/completionspara adaptar prompt.task-result+ webhook.
Flujo E2E
- Flutter obtiene token de Firebase Auth.
- Flutter llama
POST /api/invitations/create. - Backend manda petición asíncrona a Novita (
task_id). - Novita responde por webhook.
- Backend descarga salida y sube a Storage.
- Firestore actualiza
status,previewUrl,finalUrl. - 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
- Si no ves cambios de estado en app: valida que webhook llegue a
/api/webhooks/novita. - Si
createdevuelve 401: revisa token Firebase en headerAuthorization. - Si Firestore no guarda: valida
Firebase:ProjectIdy 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.cscodigo/backend/InvitaIA.Api/Controllers/NovitaWebhookController.cscodigo/backend/InvitaIA.Api/Workers/NovitaTaskWorker.cscodigo/app/lib/services/api_service.dart
- Documentación oficial Novita:
Share this content: