Files
pluriwave/ARQ-REVISION-F1.md
agent-arq a739fb4162
Some checks failed
Flutter CI/CD — PluriWave / Test + Build (pull_request) Has been cancelled
docs(arq): revisión arquitectura Fase 1 — stack aprobado, ajustes menores
2026-04-04 16:39:37 +02:00

5.2 KiB

Revisión Arquitectura — PluriWave Fase 1

Arq | 2026-04-04


Decisión: stack APROBADO con ajustes menores

El stack propuesto es sólido para una app de radio Flutter. Sin conflictos bloqueantes de dependencias. Sin problemas de licencia.


Stack analizado

Paquete Versión declarada Latest Licencia
just_audio ^0.9.42 0.10.5 Apache-2.0 + MIT
audio_service ^0.18.15 0.18.18 MIT
audio_session ^0.1.21 0.2.3 N/A (OSI)
sqflite ^2.4.1 2.4.2 BSD-2
flutter_animate ^4.5.2 4.5.2 BSD-3
google_mobile_ads comentado 7.0.0 Apache-2.0

Análisis de compatibilidad de versiones

Dependencia crítica: audio_session

Tres paquetes compiten por audio_session:

  • just_audio 0.9.42 requiere: ^0.1.14 → ≥0.1.14 <0.2.0
  • audio_service 0.18.15 requiere: ^0.1.20 → ≥0.1.20 <0.2.0
  • pubspec.yaml declara: ^0.1.21 → ≥0.1.21 <0.2.0

Intersección: ≥0.1.21 <0.2.0 → disponibles hasta 0.1.25 → SIN CONFLICTO

rxdart

Ambos paquetes requieren >=0.26.0 <0.29.0. rxdart latest es 0.28.0. SIN CONFLICTO

js (dep transitiva de audio_service)

audio_service requiere js >=0.6.3 <0.8.0. Esto es solo para la plataforma web. Si no hay web target, es irrelevante. Si en el futuro se añade web: aceptable, js 0.7.2 es la latest en ese rango.


Ajustes recomendados

🟠 1. Actualizar just_audio a ^0.10.0 (importante)

just_audio 0.9.x está en mantenimiento. La rama 0.10.x (latest: 0.10.5) tiene:

  • Soporte Flutter ≥3.27.0 (el runner macmini-flutter probablemente lo cumple)
  • API compatible para streaming de radio (URLs HTTP/HTTPS directas)
  • audio_session requiere >=0.1.24 <0.3.0 con 0.10.x — compatible con la gama completa

Acción: cambiar just_audio: ^0.9.42just_audio: ^0.10.0 en pubspec.yaml. Si el runner tiene Flutter <3.27.0, mantener 0.9.42.

🟡 2. Actualizar audio_service a ^0.18.18 (menor)

La 0.18.18 actualiza audio_session a >=0.1.25 <0.3.0, lo que permite usar versiones 0.2.x en el futuro sin romper nada.

🟡 3. google_mobile_ads — descomentarlo con cuidado

Actualmente comentado (correcto para Fase 1). Cuando se active:

  • Usar ^5.3.0 (ya declarado) si el runner tiene Flutter ≥3.7.0 —
  • Evitar ^7.0.0 por ahora: requiere actualización de compileSdk en Android y puede romper el CI
  • Necesitará ad_unit_id real en secrets de CI antes de activar en release builds
  • Play Store requiere declarar uso de datos de anuncios en el Data Safety form

🔴 4. Signing config para release builds — BLOQUEANTE para CI

android/app/build.gradle.kts tiene:

signingConfig = signingConfigs.getByName("debug")  // TODO: fix

Esto firma el APK/AAB release con la clave debug. No es aceptable para Play Store, pero sí funciona para artifacts internos de CI (distribución interna, testing).

Para CI de Fase 1: aceptable como está. Para producción: añadir keystore como secret en Gitea CI y configurar signing real.


Estructura de app — observación

lib/main.dart es el scaffold por defecto de Flutter (contador demo). Los devs deberán reemplazarlo con la arquitectura real de PluriWave antes de que los tests sean útiles.

Sugerencia de estructura para Fase 1:

lib/
├── main.dart
├── app.dart                    # MaterialApp + Provider setup
├── core/
│   ├── servicios/
│   │   ├── servicio_audio.dart # just_audio + audio_service wrapper
│   │   └── servicio_radio.dart # fetch streams/stations API
│   └── db/
│       └── db_helper.dart      # sqflite setup
├── modelos/
│   ├── emisora.dart
│   └── favorito.dart
└── ui/
    ├── pantalla_inicio.dart
    ├── pantalla_reproductor.dart
    └── widgets/

Provider (ya en pubspec) es correcto para este scope. No hace falta Riverpod ni Bloc para Fase 1.


Licencias — veredicto

Paquete Licencia Uso comercial Distribución
just_audio Apache-2.0 + MIT libre libre
audio_service MIT libre libre
sqflite BSD-2 libre libre
flutter_animate BSD-3 libre libre
google_mobile_ads Apache-2.0 (con cuenta AdMob) libre

Sin restricciones de licencia para app comercial en Play Store.


Resumen ejecutivo

Ítem Estado
Conflictos de dependencias Ninguno
Licencias incompatibles Ninguna
Stack adecuado para radio en streaming
Signing release para Play Store ⚠️ Pendiente (keystore)
just_audio versión óptima 🟠 Actualizar a ^0.10.0 si Flutter ≥3.27
google_mobile_ads 🟡 Descomentarlo solo cuando haya Ad Unit IDs reales
Estructura de código 🟡 Scaffold vacío — devs deben estructurar lib/

El stack puede profundizarse sin riesgo. Sin bloqueos.


Arq — revisión sin acceso al analisis.md de Obsidian (fichero no sincronizado localmente). Revisión realizada directamente desde pub.dev API + pubspec.yaml del repo.