FocusCapabilityDelegate
Миксин, предоставляющий интерфейс для управления фокусом UI-элементов в системе Duit.
Классы, использующие этот делегат, должны реализовать методы для работы с FocusNode — запрос фокуса, навигация между элементами и управление состоянием фокуса.
Методы
requestFocus
void requestFocus(String nodeId);
Запрашивает перемещение фокуса к FocusNode, связанному с указанным nodeId.
nextFocus
bool nextFocus(String nodeId);
Перемещает фокус к следующему фокусируемому узлу в порядке обхода.
Возвращает: true, если фокус был успешно перемещен.
previousFocus
bool previousFocus(String nodeId);
Перемещает фокус к предыдущему фокусируемому узлу.
Возвращает: true, если фокус был успешно перемещен.
unfocus
void unfocus(
String nodeId, {
UnfocusDisposition disposition = UnfocusDisposition.scope,
});
Снимает фокус с указанного узла.
Параметры:
nodeId— идентификатор узлаdisposition— способ обработки фокуса при снятии
focusInDirection
bool focusInDirection(String nodeId, TraversalDirection direction);
Перемещает фокус в указанном направлении (вверх, вниз, влево, вправо).
attachFocusNode
void attachFocusNode(String nodeId, FocusNode node);
Привязывает FocusNode к делегату с указанным идентификатором.
detachFocusNode
void detachFocusNode(String nodeId);
Отвязывает FocusNode с указанным идентификатором.
getNode
FocusNode? getNode(Object? key);
Возвращает FocusNode, связанный с указанным ключом.
releaseResources
void releaseResources();
Освобождает ресурсы делегата.
Пример использования
final class MyFocusManager with FocusCapabilityDelegate {
final _nodes = <String, FocusNode>{};
void attachFocusNode(String nodeId, FocusNode node) {
_nodes[nodeId] = node;
}
void detachFocusNode(String nodeId) {
_nodes.remove(nodeId);
}
void requestFocus(String nodeId) {
_nodes[nodeId]?.requestFocus();
}
FocusNode? getNode(Object? key) => _nodes[key];
// ... остальные методы
}
Управление фокусом особенно важно для обеспечения доступности (accessibility) и поддержки клавиатурной навигации в приложениях.