Á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ía2. Usar
MergeSemantics con label en cada score card3. Para checkboxes: usar
CheckboxListTile con title que expone texto semántico4. 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