findStyleForFitHeight function
Implementation
(double, int) findStyleForFitHeight({
required double maxWidth,
required double maxHeight,
required String text,
required TextStyle style,
}) {
var lineHeight = maxHeight;
var style0 = style.copyWith(fontSize: maxHeight);
final textPainter = TextPainter(
text: TextSpan(
text: text,
style: style0,
),
textDirection: TextDirection.ltr,
)..layout(maxWidth: maxWidth);
var lines = textPainter.computeLineMetrics();
var totalHeight = lines.fold(0.0, (prev, line) => prev + line.height);
const decrement = -0.5;
while (totalHeight > maxHeight) {
lineHeight += decrement;
style0 = style0.copyWith(fontSize: lineHeight);
textPainter
..text = TextSpan(
text: text,
style: style0,
)
..layout(maxWidth: maxWidth);
lines = textPainter.computeLineMetrics();
totalHeight = lines.fold(0.0, (prev, line) => prev + line.height);
}
return (style0.fontSize!, lines.length);
}