resolveDismissAction method

CockpitSemanticActionHandler? resolveDismissAction()

Implementation

CockpitSemanticActionHandler? resolveDismissAction() {
  const intent = DismissIntent();

  CockpitSemanticActionHandler? resolveFrom(BuildContext? context) {
    if (context is! Element || !context.mounted) return null;
    final action = Actions.maybeFind<Intent>(context, intent: intent);
    if (action == null || !_isDismissActionEnabled(action, context, intent)) {
      return null;
    }
    return () {
      if (!context.mounted) return;
      final current = Actions.maybeFind<Intent>(context, intent: intent);
      if (current == null ||
          !_isDismissActionEnabled(current, context, intent)) {
        return;
      }
      Actions.of(context).invokeAction(current, intent, context);
    };
  }

  final focused = resolveFrom(FocusManager.instance.primaryFocus?.context);
  if (focused != null) return focused;

  final rootContext = _boundaryKey.currentContext;
  if (rootContext is! Element) return null;
  CockpitSemanticActionHandler? resolved;

  void visit(Element element) {
    if (resolved != null || !element.mounted) return;
    final children = <Element>[];
    element.visitChildElements(children.add);
    for (final child in children.reversed) {
      visit(child);
      if (resolved != null) return;
    }
    resolved = resolveFrom(element);
  }

  visit(rootContext);
  return resolved;
}