Виджет Semantics
Виджет Semantics оборачивает дочерний интерфейс
и передаёт в дерево доступности параметры
label, hint, value,
флаги кнопки и заголовка. Без него диктор
читает только текст из Text.
Соседние обёртки
MergeSemantics
и ExcludeSemantics
меняют, как собираются описания дочерних виджетов.
Синтаксис
Semantics(
label: 'abcde',
child: child,
)
Параметры
| Параметр | Описание |
|---|---|
child |
Дочерний виджет, для которого задают семантику. |
label |
Краткое имя элемента для озвучивания. |
hint |
Подсказка, что произойдёт после действия. |
value |
Текущее значение, например у ползунка. |
button |
Если true, элемент объявляют кнопкой.
|
enabled |
Доступен ли элемент для взаимодействия. |
Пример
Давайте озвучим иконку отдельной подписью:
import 'package:flutter/material.dart';
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: Center(
child: Semantics(
label: 'abcde',
button: true,
child: IconButton(
onPressed: () {},
icon: const Icon(Icons.search),
),
),
),
),
),
);
}
На экране иконка лупы получит для диктора имя 'abcde',
хотя на кнопке нет текста.
Пример
Давайте добавим hint к той же кнопке:
import 'package:flutter/material.dart';
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: Center(
child: Semantics(
label: '12345',
hint: 'abcde',
button: true,
child: ElevatedButton(
onPressed: () {},
child: const SizedBox(width: 48, height: 48),
),
),
),
),
),
);
}
На экране пустая кнопка для зрячего пользователя, а диктор прочитает метку и подсказку.
Смотрите также
-
виджет
MergeSemantics,
который объединяет описания дочерних виджетов -
виджет
ExcludeSemantics,
который скрывает дочерние узлы от диктора -
виджет
SemanticsDebugger,
который рисует дерево доступности поверх UI -
виджет
TextField,
который принимает semanticLabel для поля ввода