maskedSpan method
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);
}