Repository navigation
Estructura de app: cabecera con logo, menú y pantalla de carga - #31
Conversation
AppScreen ahora muestra siempre el logo (dibujado con CustomPainter, sin nuevas dependencias) y "Generador de QR" en el AppBar, con el botón "Atrás" automático de Flutter cuando corresponde. El título de cada pantalla (WhatsApp, Instagram, etc.) pasa a ser un encabezado dentro del cuerpo. Se agrega un Drawer lateral con los cuatro tipos de QR, accesible desde el ícono de menú en cualquier pantalla, que resalta el tipo actual y navega reemplazando el stack hasta Inicio.
web/index.html pintaba blanco vacío mientras arrancaba Flutter: ahora muestra el logo sobre fondo Papel (paleta de DESIGN.md) y se desvanece al recibir flutter-first-frame del engine. También agrega apple-mobile-web-app-capable, que faltaba junto al resto de los meta tags de instalación en iPhone. Documenta cabecera, menú y splash en DESIGN.md.
Capturas con Playwright en viewport de celular (splash, inicio, menú abierto, cada flujo) y una simulación de instalación en iPhone, con la justificación del menú lateral y qué aportó cada skill.
|
Revisé el issue #29, el PR y el diff completo sobre Verificaciones: Bloqueantes Ninguno encontrado. Sugerencias
VEREDICTO: APROBADO |
QA de comportamiento — ronda 1Commit probado: Los recorridos ejecutados funcionan. La validación queda incompleta por el criterio de instalación real en Safari/iPhone; el resultado final marca ese bloqueo, no un defecto reproducido de la app. Plan numerado y resultados
Incidencias del instrumentalEl ingreso inicial mediante QA: FALLA |
El estado "seleccionado" sólo se comunicaba con color/borde/peso de letra; un lector de pantalla no podía identificar qué tipo de QR está activo al recorrer el menú (sugerencia de revisión del #29/PR #31). selectedColor fija el mismo color de texto que ya tenía la fila, para que selected sólo aporte semántica sin cambiar la apariencia.
Atendido de la revisión (reviewer, VEREDICTO: APROBADO, sin bloqueantes)
Commit Desacuerdo con el QA (QA: FALLA)El único punto en rojo es el ítem 4, instalación real en Safari/iPhone, y el propio reporte aclara que no es un defecto reproducido: "No se observó un fallo de instalación; falta evidencia para aprobar este criterio". No hay entorno con Safari/iPhone disponible para este agente — es una limitación conocida del sandbox, no del código. Por eso no lo tomo como "corregir con TDD": no hay nada en Además es el mismo criterio, con la misma limitación, que en el PR #30 (#28) resultó en No voy a forzar un cambio de código para "resolver" una limitación de entorno. Agrego el label |
Closes #29
Resumen
Después del rediseño del #26 y el logo del #28, la app no se sentía como
una app de celular: no tenía cabecera con identidad, ni menú entre los
tipos de QR, ni pantalla de carga, y faltaba un meta tag para instalarse
bien en el iPhone. Este PR agrega esa estructura, sin tocar la lógica de
dominio/impresión/export ni agregar funcionalidades nuevas:
AppScreen,AppBrandTitle): elAppBarde todapantalla muestra siempre el logo + "Generador de QR" (antes cada pantalla
mostraba su propio nombre ahí). El botón "Atrás" sigue siendo el
comportamiento nativo de Flutter cuando hay una pantalla anterior en el
stack. El nombre de cada sección (ej. "WhatsApp") pasó a un encabezado
dentro del cuerpo (
AppScreen.screenTitle).AppLogo/AppLogoPainter): redibuja la geometría deassets/branding/logo.svgcon unCustomPainter, sin agregar unadependencia de SVG ni un asset rasterizado nuevo.
AppDrawer,endDrawer): los cuatro tipos de QR,accesibles desde el botón de menú de cualquier pantalla, con el tipo
actual resaltado. Elegir uno reemplaza el stack hasta Inicio antes de
abrirlo, para que "Atrás" siempre vuelva ahí.
web/index.html): splash HTML/CSS con el logosobre fondo Papel (antes blanco liso) mientras arranca Flutter, que se
desvanece al recibir
flutter-first-frame.apple-mobile-web-app-capableque faltaba; el resto (manifest,apple-touch-icon,status-bar-style,title) ya venía del Identidad: logo de la app, favicon e íconos para instalar en el celular #28 y serevisó sin encontrar problemas.
DESIGN.mdactualizado con cabecera, menú lateral, logo en Dart ysplash.
Por qué menú lateral y no barra inferior: está detallado en
docs/issue-29/README.md#por-qué-este-patrón-de-menú-justificación(resumen: no le resta alto a la vista previa de la etiqueta, que es WYSIWYG
del cartel impreso, y escala mejor que una barra fija a "los tipos que se
sumen" que menciona el issue).
Cómo lo probé
flutter analyze: sin errores ni warnings.flutter test: 100 tests en verde, incluye los nuevosapp_logo_test.dart,app_screen_test.dart,app_drawer_test.dartyweb_shell_test.dart(meta tags + splash deweb/index.html), más eltest existente de
label_preview_screen_test.dartajustado a que elAppBarahora es la marca fija, no el nombre de la sección.instaló sólo en este entorno para generar las capturas, no se agregó
como dependencia del repo) en viewport de celular: splash → Inicio → los
tres flujos reales (WhatsApp, Instagram, Google Reseñas) → Mercado Pago
"Próximamente" → menú abierto desde distintas pantallas → "Atrás" vuelve
a Inicio.
lib/src/domain/,lib/src/printing/nilib/src/export/:la etiqueta impresa no cambió (los tests de punta a punta de
AGENTS.md, que verifican los píxeles reales del QR impreso, siguenpasando).
entorno autónomo): la instalación se validó revisando meta tags y
manifest.jsoncontra la documentación de Apple/PWA, cubierto portest/web_shell_test.dart. Quedó señalado endocs/issue-29/README.md.Qué aportaron las skills
Detalle completo en
docs/issue-29/README.md#qué-aportó-cada-skill.Resumen:
frontend-designguió reusar los tokens existentes (Sello, Papel,Superficie, Borde, 12px, sin sombras) para la cabecera/menú/splash nuevos
en vez de introducir color o estilo nuevo;
impeccable(
component-review/craft) confirmó separar marca fija vs. título desección y resolver el estado "seleccionado" del menú con los tokens
existentes en vez del azul de selección por defecto de Material.
Entregable visible
Capturas en
docs/issue-29/(viewport 390×844): splash, inicio concabecera, menú abierto, cada flujo (WhatsApp, Instagram, Google Reseñas,
Mercado Pago) y una simulación de instalación en iPhone en modo standalone
(
docs/issue-29/10-standalone-simulado.png, composición con capturasreales de la app, mismo criterio que
docs/issue-28/iphone-simulation.png).Para verlo correr:
Abrí
http://localhost:8765en un viewport de celular (ej. DevTools enmodo responsive, 390×844) y esperá a que el splash se desvanezca.