maskedSpan method

TextSpan maskedSpan(
  1. String text,
  2. TextStyle style
)

text in style with the face-drawn characters transparent: the same layout as TextSpan(text: text, style: style).

Implementation

TextSpan maskedSpan(String text, TextStyle style) {
  var drawn = false;
  for (var i = 0; i < text.length; i++) {
    if (drawsChar(text.codeUnitAt(i))) {
      drawn = true;
      break;
    }
  }
  if (!drawn) return TextSpan(text: text, style: style);
  const hidden = TextStyle(color: Color(0x00000000));
  final children = <TextSpan>[];
  var runStart = 0;
  var runDrawn = drawsChar(text.codeUnitAt(0));
  for (var i = 1; i <= text.length; i++) {
    final d = i < text.length && drawsChar(text.codeUnitAt(i));
    if (i == text.length || d != runDrawn) {
      final run = text.substring(runStart, i);
      children.add(
        runDrawn ? TextSpan(text: run, style: hidden) : TextSpan(text: run),
      );
      runStart = i;
      runDrawn = d;
    }
  }
  return TextSpan(style: style, children: children);
}