onMarkup method

  1. @override
HypertextSpan onMarkup(
  1. List<HypertextSpan>? children,
  2. MarkupContext ctx
)
override

Implementation

@override
HypertextSpan onMarkup(List<HypertextSpan>? children, MarkupContext ctx) {
  if (children.isEmpty) return kEmptyHypertextSpan;

  // 对于[children]只有一个[InheritedTextSpan]的情况,减少Widget嵌套将内容重新包装
  if (_canLift(children, ctx)) return _doLift(children!.first, ctx);

  final onLongPress = _enableLongPress(ctx)
      ? () => ctx.fireEvent(MarkupLongPressEvent.from(ctx))
      : null;
  final onTap = _enableTap(ctx) || onLongPress == null
      ? () => ctx.fireEvent(MarkupTapEvent.from(ctx))
      : null;
  final title = ctx.get('title');
  final cursor = _getCursor(ctx);
  final alignment = ctx.switchT(ctx.get('alignment'), mpPLAlignment);
  final baseline = ctx.switchT(ctx.get('baseline'), mpBaselines);

  final effectiveAlignment =
      alignment ?? this.alignment ?? PlaceholderAlignment.baseline;
  final effectiveBaseline = baseline ??
      this.baseline ??
      (this.alignment == null ? TextBaseline.alphabetic : null);

  Widget child = GestureDetector(
    onTap: onTap,
    onLongPress: onLongPress,
    child: Text.rich(HypertextTextSpan(children: children, style: style)),
  );
  if (title != null) {
    child = Tooltip(message: title, child: child);
  }
  if (cursor != null) {
    child = MouseRegion(cursor: cursor, child: child);
  }
  return HypertextWidgetSpan(
    alignment: effectiveAlignment,
    baseline: effectiveBaseline,
    child: child,
  );
}