← Back to list

H4 — Botones sin texto en semántica

🔴 Alta #3 | Score: 5/10 pending
Prioridad: 🔴 Alta #3
Área: Accesibilidad / CanvasKit
Severidad: Alta
Puntaje actual: 5/10 | Potencial: 8/10

---

Síntoma



Todos los botones de score, checkboxes y filtros en la app tienen role="button" o role="checkbox" pero textContent vacío. CanvasKit no expone el texto de los botones en el árbol de accesibilidad semántica.

Evidencia



Semantic tree dump (todos los scripts):
r=button t="" (96,20) ← sin texto
r=button t="" (475,134) ← sin texto
r=checkbox t="" (105,100) ← sin texto
r=button t="Back" (88,8) ← excepción: toolbar sí tiene texto
r=button t="Save offline" (1120,8) ← toolbar OK
r=button t="Edit PDF" (1160,8) ← toolbar OK


Los únicos botones CON texto son los de la toolbar del PDF viewer (Back, Save offline, Edit PDF). Los scores en la galería, checkboxes de favoritos y botones de filtro NO tienen texto.

Impacto



Factor | Detalle
--------|---------
Testing | Requiere coordenadas fijas (640, 104 para primer score). No se puede verificar qué score está en qué posición
Screen readers | Usuarios ciegos no pueden identificar scores ni interactuar con la lista
Favoritos | Checkbox sin label. Screen reader no sabe qué score está marcando como favorito
Filtros | Dropdowns sin texto. No detectable qué filtro está activo

Causa raíz



CanvasKit renderiza texto como glifos en WebGL canvas. No hay elementos DOM subyacentes. El árbol de accesibilidad de Flutter no recibe los textContent de los widgets Text dentro de botones cuando se renderiza con CanvasKit. Es una limitación conocida de Flutter Web + CanvasKit.

Reproducción



export DISPLAY=:99
cd /home/admin/fluttwebfaris
node eval-detail.mjs
# Observar: r=button t="" para todos los scores


Fix sugerido (Flutter)




1. Agregar semanticsLabel explícito a todos los widgets ListTile y Card en la galería

2. Usar MergeSemantics con label en cada score card

3. Para checkboxes: usar CheckboxListTile con title que expone texto semántico

4. Alternativa: migrar a skwasm (render WASM) que tiene mejor soporte de accesibilidad

Tiempo estimado de fix



1-2h (agregar semanticsLabel a widgets existentes)

Referencias



eval-detail.mjs — Score detail semantic analysis
eval-filters.mjs — Filter button detection
eval-tabs.mjs — Favorites checkbox detection
NOTAS-ERRORES.md línea 59-73

Review

Comments (0)