buildTextSpan method

TextSpan buildTextSpan ()

Builds TextSpan from current editing value.

By default makes text in composing range appear as underlined. Descendants can override this method to customize appearance of text.

Implementation

TextSpan buildTextSpan() {
  if (!widget.obscureText && _value.composing.isValid) {
    final TextStyle composingStyle = widget.style.merge(
      const TextStyle(decoration: TextDecoration.underline),
    );

    return TextSpan(
      style: widget.style,
      children: <TextSpan>[
        TextSpan(text: _value.composing.textBefore(_value.text)),
        TextSpan(
          style: composingStyle,
          text: _value.composing.textInside(_value.text),
        ),
        TextSpan(text: _value.composing.textAfter(_value.text)),
    ]);
  }

  String text = _value.text;
  if (widget.obscureText) {
    text = RenderEditable.obscuringCharacter * text.length;
    final int o =
      _obscureShowCharTicksPending > 0 ? _obscureLatestCharIndex : null;
    if (o != null && o >= 0 && o < text.length)
      text = text.replaceRange(o, o + 1, _value.text.substring(o, o + 1));
  }
  return TextSpan(style: widget.style, text: text);
}