paragraph method

Paragraph? paragraph(
  1. int styleId,
  2. String text,
  3. bool rtl
)

A single-line paragraph for one run, laid out at its natural width.

Implementation

ui.Paragraph? paragraph(int styleId, String text, bool rtl) {
  final key = '$styleId\u0000${rtl ? 1 : 0}\u0000$text';
  final cached = _paragraphs.remove(key);
  if (cached != null) {
    _paragraphs[key] = cached;
    return cached;
  }
  final style = textStyle(styleId);
  if (style == null) return null;
  final builder =
      ui.ParagraphBuilder(ui.ParagraphStyle(textDirection: rtl ? TextDirection.rtl : TextDirection.ltr, maxLines: 1))
        ..pushStyle(style.getTextStyle())
        ..addText(text);
  final paragraph = builder.build()..layout(const ui.ParagraphConstraints(width: double.infinity));
  // Right-to-left text anchors to the right edge, which must be finite.
  paragraph.layout(ui.ParagraphConstraints(width: paragraph.maxIntrinsicWidth.ceilToDouble()));
  _paragraphs[key] = paragraph;
  if (_paragraphs.length > _paragraphCacheSize) {
    _paragraphs.remove(_paragraphs.keys.first)?.dispose();
  }
  return paragraph;
}