buildText method

WidgetPlaceholder buildText (
  1. BuildMetadata meta,
  2. TextBits text
)
inherited

Builds RichText.

Implementation

WidgetPlaceholder buildText(BuildMetadata meta, TextBits text) {
  text.trimRight();
  if (text.isEmpty) return null;

  final widgets = <WidgetPlaceholder>[];
  for (final compiled in TextCompiler(text).compile()) {
    if (compiled.widget != null) {
      widgets.add(compiled.widget);
      continue;
    }

    if (compiled.spanBuilder == null) continue;
    widgets.add(
      WidgetPlaceholder<TextBits>(text).wrapWith((context, _) {
        final span = compiled.spanBuilder(context);
        final tsh = text.tsb?.build(context);
        final textAlign = tsh?.textAlign ?? TextAlign.start;

        if (span is WidgetSpan &&
            span.alignment == PlaceholderAlignment.baseline &&
            textAlign == TextAlign.start) {
          return span.child;
        }

        return RichText(
          overflow: tsh?.textOverflow ?? TextOverflow.clip,
          text: span,
          textAlign: textAlign,
          textDirection: tsh?.textDirection ?? TextDirection.ltr,

          // TODO: calculate max lines automatically for ellipsis if needed
          // currently it only renders 1 line with ellipsis
          maxLines: tsh?.maxLines == -1 ? null : tsh?.maxLines,
        );
      }),
    );
  }

  return buildColumnPlaceholder(meta, widgets);
}