calculateBaseline method
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);
}