captureScreenContext method

ScreenContext captureScreenContext()

Capture a snapshot of the current screen's UI elements.

Implementation

ScreenContext captureScreenContext() {
  final views = WidgetsBinding.instance.renderViews;
  if (views.isEmpty) {
    AiLogger.warn(
      'No render views available for screen capture',
      tag: 'Semantics',
    );
    return ScreenContext.empty();
  }
  final owner = views.first.owner?.semanticsOwner;
  final root = owner?.rootSemanticsNode;
  if (root == null) {
    AiLogger.warn(
      'No root semantics node — tree may not be ready',
      tag: 'Semantics',
    );
    return ScreenContext.empty();
  }

  final elements = <UiElement>[];
  _walkNode(root, elements, depth: 0, parentLabels: []);
  AiLogger.log(
    'Screen captured: ${elements.length} elements '
    '(${elements.where((e) => e.availableActions.isNotEmpty).length} interactive)',
    tag: 'Semantics',
  );
  return ScreenContext(elements: elements, capturedAt: DateTime.now());
}