Přístupný vlastní přepínač (Switch) (Flutter)
Vlastní přepínač postavený na gestu potřebuje čtečce obrazovky sdělit dvě věci: že jde o přepínač, a jaký je jeho aktuální stav — přesně tak, jak to interně řeší i vestavěný widget Switch.
1. Jak na to
class MujPrepinac extends StatelessWidget {
const MujPrepinac({
required this.value,
required this.onChanged,
required this.label,
super.key,
});
final bool value;
final ValueChanged<bool> onChanged;
final String label;
@override
Widget build(BuildContext context) {
return Semantics(
toggled: value,
label: label,
container: true,
child: GestureDetector(
onTap: () => onChanged(!value),
child: /* vizuální implementace */,
),
);
}
}
Proč to takhle je
toggled: bool?naSemanticssděluje čtečce obrazovky aktuální stav přepínače (zapnuto/vypnuto). Bez něj by čtečka ohlásila jen obecné „tlačítko", ne „přepínač, zapnuto".GestureDetectors výchozím nastavením sám zpřístupníonTapjako sémantickou akci aktivace — stejně jako u obyčejného vlastního tlačítka, není potřeba ji duplikovat ručně naSemantics.- Vestavěný
Switchwidget řeší v podstatě totéž interně: jeho viditelnýGestureDetectorslouží jen k tažení palce prstem, a má proto výslovně nastavenéexcludeFromSemantics: true(samotné tažení není akce, kterou by čtečka měla nabízet). Skutečná aktivace klepnutím je zapojená v jeho vlastní vnitřní implementaci a sloučí se do stejného sémantického uzlu jakotoggled.
Pravidla
- WCAG 4.1.2 (Název, role, hodnota) — stav ovládacího prvku (zapnuto/vypnuto) musí být programově zjistitelný.
Komentáře
Zatím zde nejsou žádné komentáře. Buďte první, kdo napíše svůj názor.
Přidat komentář k „Přístupný vlastní přepínač (Switch) (Flutter)“