Role tlačítka na vlastním prvku (Flutter)
Když si stavíte vlastní klikatelný prvek bez použití vestavěného tlačítkového widgetu, musíte čtečce obrazovky sami říct, že jde o tlačítko. Řada návodů k tomu navíc ručně duplikuje i samotnou aktivaci — což ve skutečnosti není potřeba, pokud používáte GestureDetector.
1. Jak na to
class MujOdznak extends StatelessWidget {
const MujOdznak({required this.onTap, required this.label, super.key});
final VoidCallback onTap;
final String label;
@override
Widget build(BuildContext context) {
return Semantics(
button: true,
label: label,
child: GestureDetector(
onTap: onTap,
child: /* vizuální obsah */,
),
);
}
}
Proč to takhle je
GestureDetectors výchozím nastavením (excludeFromSemantics: false) sám automaticky zpřístupní zadanýonTapjako sémantickou akci aktivace — dvojité poklepání v čtečce obrazovky tedy funguje, aniž bysteonTapmuseli ještě jednou ručně zapisovat naSemantics.- Ruční duplikace
onTapi naSemanticsje proto zbytečná, pokud pod ním stojíGestureDetector. Jediný případ, kdy jeSemantics(onTap: ...)skutečně potřeba, je vlastní klikatelný prvek, kterýGestureDetectorvůbec nepoužívá (např. vlastní rozpoznávač gest). button: truealabelnaSemanticsse sGestureDetectorem sloučí do jednoho výsledného uzlu — ani jeden z nich totiž sám o sobě netvoří vlastní hranici přístupnostního stromu.
Pravidla
- WCAG 4.1.2 (Název, role, hodnota) — role prvku (tlačítko) musí být programově zjistitelná, ne jen vizuálně naznačená.
Komentáře
Zatím zde nejsou žádné komentáře. Buďte první, kdo napíše svůj názor.
Přidat komentář k „Role tlačítka na vlastním prvku (Flutter)“