Flutter

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

  • GestureDetector s výchozím nastavením (excludeFromSemantics: false) sám automaticky zpřístupní zadaný onTap jako sémantickou akci aktivace — dvojité poklepání v čtečce obrazovky tedy funguje, aniž byste onTap museli ještě jednou ručně zapisovat na Semantics.
  • Ruční duplikace onTap i na Semantics je proto zbytečná, pokud pod ním stojí GestureDetector. Jediný případ, kdy je Semantics(onTap: ...) skutečně potřeba, je vlastní klikatelný prvek, který GestureDetector vůbec nepoužívá (např. vlastní rozpoznávač gest).
  • button: true a label na Semantics se s GestureDetectorem 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á.

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 „Role tlačítka na vlastním prvku (Flutter)“