Flutter

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? na Semantics sdě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".
  • GestureDetector s výchozím nastavením sám zpřístupní onTap jako sémantickou akci aktivace — stejně jako u obyčejného vlastního tlačítka, není potřeba ji duplikovat ručně na Semantics.
  • Vestavěný Switch widget řeší v podstatě totéž interně: jeho viditelný GestureDetector slouží 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 jako toggled.

Pravidla

  • WCAG 4.1.2 (Název, role, hodnota) — stav ovládacího prvku (zapnuto/vypnuto) musí být programově zjistitelný.

Zdroje

Štítky

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)“