getSemanticsData method

SemanticsData getSemanticsData ()

Returns a summary of the semantics for this node.

If this node has mergeAllDescendantsIntoThisNode, then the returned data includes the information from this node's descendants. Otherwise, the returned data matches the data on this node.

Implementation

SemanticsData getSemanticsData() {
  int flags = _flags;
  int actions = _actionsAsBits;
  String label = _label;
  String hint = _hint;
  String value = _value;
  String increasedValue = _increasedValue;
  String decreasedValue = _decreasedValue;
  TextDirection textDirection = _textDirection;
  Set<SemanticsTag> mergedTags = tags == null ? null : Set<SemanticsTag>.from(tags);
  TextSelection textSelection = _textSelection;
  int scrollChildCount = _scrollChildCount;
  int scrollIndex = _scrollIndex;
  double scrollPosition = _scrollPosition;
  double scrollExtentMax = _scrollExtentMax;
  double scrollExtentMin = _scrollExtentMin;
  int platformViewId = _platformViewId;
  final double elevation = _elevation;
  double thickness = _thickness;
  final Set<int> customSemanticsActionIds = <int>{};
  for (CustomSemanticsAction action in _customSemanticsActions.keys)
    customSemanticsActionIds.add(CustomSemanticsAction.getIdentifier(action));
  if (hintOverrides != null) {
    if (hintOverrides.onTapHint != null) {
      final CustomSemanticsAction action = CustomSemanticsAction.overridingAction(
        hint: hintOverrides.onTapHint,
        action: SemanticsAction.tap,
      );
      customSemanticsActionIds.add(CustomSemanticsAction.getIdentifier(action));
    }
    if (hintOverrides.onLongPressHint != null) {
      final CustomSemanticsAction action = CustomSemanticsAction.overridingAction(
        hint: hintOverrides.onLongPressHint,
        action: SemanticsAction.longPress,
      );
      customSemanticsActionIds.add(CustomSemanticsAction.getIdentifier(action));
    }
  }

  if (mergeAllDescendantsIntoThisNode) {
    _visitDescendants((SemanticsNode node) {
      assert(node.isMergedIntoParent);
      flags |= node._flags;
      actions |= node._actionsAsBits;
      textDirection ??= node._textDirection;
      textSelection ??= node._textSelection;
      scrollChildCount ??= node._scrollChildCount;
      scrollIndex ??= node._scrollIndex;
      scrollPosition ??= node._scrollPosition;
      scrollExtentMax ??= node._scrollExtentMax;
      scrollExtentMin ??= node._scrollExtentMin;
      platformViewId ??= node._platformViewId;
      if (value == '' || value == null)
        value = node._value;
      if (increasedValue == '' || increasedValue == null)
        increasedValue = node._increasedValue;
      if (decreasedValue == '' || decreasedValue == null)
        decreasedValue = node._decreasedValue;
      if (node.tags != null) {
        mergedTags ??= <SemanticsTag>{};
        mergedTags.addAll(node.tags);
      }
      if (node._customSemanticsActions != null) {
        for (CustomSemanticsAction action in _customSemanticsActions.keys)
          customSemanticsActionIds.add(CustomSemanticsAction.getIdentifier(action));
      }
      if (node.hintOverrides != null) {
        if (node.hintOverrides.onTapHint != null) {
          final CustomSemanticsAction action = CustomSemanticsAction.overridingAction(
            hint: node.hintOverrides.onTapHint,
            action: SemanticsAction.tap,
          );
          customSemanticsActionIds.add(CustomSemanticsAction.getIdentifier(action));
        }
        if (node.hintOverrides.onLongPressHint != null) {
          final CustomSemanticsAction action = CustomSemanticsAction.overridingAction(
            hint: node.hintOverrides.onLongPressHint,
            action: SemanticsAction.longPress,
          );
          customSemanticsActionIds.add(CustomSemanticsAction.getIdentifier(action));
        }
      }
      label = _concatStrings(
        thisString: label,
        thisTextDirection: textDirection,
        otherString: node._label,
        otherTextDirection: node._textDirection,
      );
      hint = _concatStrings(
        thisString: hint,
        thisTextDirection: textDirection,
        otherString: node._hint,
        otherTextDirection: node._textDirection,
      );

      thickness = math.max(thickness, node._thickness + node._elevation);

      return true;
    });
  }

  return SemanticsData(
    flags: flags,
    actions: actions,
    label: label,
    value: value,
    increasedValue: increasedValue,
    decreasedValue: decreasedValue,
    hint: hint,
    textDirection: textDirection,
    rect: rect,
    transform: transform,
    elevation: elevation,
    thickness: thickness,
    tags: mergedTags,
    textSelection: textSelection,
    scrollChildCount: scrollChildCount,
    scrollIndex: scrollIndex,
    scrollPosition: scrollPosition,
    scrollExtentMax: scrollExtentMax,
    scrollExtentMin: scrollExtentMin,
    platformViewId: platformViewId,
    customSemanticsActionIds: customSemanticsActionIds.toList()..sort(),
  );
}