absorb method

void absorb(
  1. SemanticsConfiguration child
)

Absorb the semantic information from child into this configuration.

This adds the semantic information of both configurations and saves the result in this configuration.

The RenderObject owning the child configuration must be a descendant of the RenderObject that owns this configuration.

Only configurations that have explicitChildNodes set to false can absorb other configurations and it is recommended to only absorb compatible configurations as determined by isCompatibleWith.

Implementation

void absorb(SemanticsConfiguration child) {
  assert(!explicitChildNodes);

  if (!child.hasBeenAnnotated) {
    return;
  }
  if (child.isBlockingUserActions) {
    child._actions.forEach((SemanticsAction key, SemanticsActionHandler value) {
      if (_kUnblockedUserActions & key.index > 0) {
        _actions[key] = value;
      }
    });
  } else {
    _actions.addAll(child._actions);
  }
  _actionsAsBits |= child._effectiveActionsAsBits;
  _customSemanticsActions.addAll(child._customSemanticsActions);
  _flags |= child._flags;
  _textSelection ??= child._textSelection;
  _scrollPosition ??= child._scrollPosition;
  _scrollExtentMax ??= child._scrollExtentMax;
  _scrollExtentMin ??= child._scrollExtentMin;
  _hintOverrides ??= child._hintOverrides;
  _indexInParent ??= child.indexInParent;
  _scrollIndex ??= child._scrollIndex;
  _scrollChildCount ??= child._scrollChildCount;
  _platformViewId ??= child._platformViewId;
  _maxValueLength ??= child._maxValueLength;
  _currentValueLength ??= child._currentValueLength;

  _headingLevel = _mergeHeadingLevels(
    sourceLevel: child._headingLevel,
    targetLevel: _headingLevel,
  );

  textDirection ??= child.textDirection;
  _sortKey ??= child._sortKey;
  if (_identifier == '') {
    _identifier = child._identifier;
  }
  _attributedLabel = _concatAttributedString(
    thisAttributedString: _attributedLabel,
    thisTextDirection: textDirection,
    otherAttributedString: child._attributedLabel,
    otherTextDirection: child.textDirection,
  );
  if (_attributedValue.string == '') {
    _attributedValue = child._attributedValue;
  }
  if (_attributedIncreasedValue.string == '') {
    _attributedIncreasedValue = child._attributedIncreasedValue;
  }
  if (_attributedDecreasedValue.string == '') {
    _attributedDecreasedValue = child._attributedDecreasedValue;
  }
  _attributedHint = _concatAttributedString(
    thisAttributedString: _attributedHint,
    thisTextDirection: textDirection,
    otherAttributedString: child._attributedHint,
    otherTextDirection: child.textDirection,
  );
  if (_tooltip == '') {
    _tooltip = child._tooltip;
  }

  _thickness = math.max(_thickness, child._thickness + child._elevation);

  _hasBeenAnnotated = _hasBeenAnnotated || child._hasBeenAnnotated;
}