calculateBaseline method

  1. @override
void calculateBaseline()
override

Implementation

@override
void calculateBaseline() {
  // Baselines returned by children are relative to the child's local
  // coordinate system. RenderWidget paints its child offset by its own
  // border+padding; include that offset so cached CSS baselines are
  // relative to the RenderWidget's border box top (CSS expectation).
  double borderTop = renderStyle.effectiveBorderTopWidth.computedValue;
  double paddingTop = renderStyle.paddingTop.computedValue;
  double topInset = borderTop + paddingTop;

  double? resolveBaseline(RenderBox? candidate, {required bool useLast}) {
    if (candidate == null) return null;

    if (candidate is RenderBoxModel) {
      final double? cssBaseline = useLast
          ? candidate.computeCssLastBaselineOf(TextBaseline.alphabetic)
          : candidate.computeCssFirstBaselineOf(TextBaseline.alphabetic);
      if (cssBaseline != null) {
        return cssBaseline;
      }
    }

    if (!candidate.attached) {
      return candidate.hasSize ? candidate.size.height : null;
    }

    return candidate.getDistanceToBaseline(TextBaseline.alphabetic);
  }

  double? firstBaseline = resolveBaseline(firstChild, useLast: false);
  double? lastBaseline = identical(lastChild, firstChild)
      ? firstBaseline
      : resolveBaseline(lastChild, useLast: true);

  if (firstBaseline != null) firstBaseline += topInset;
  if (lastBaseline != null) lastBaseline += topInset;
  setCssBaselines(first: firstBaseline, last: lastBaseline);
}