web-dev-qa-db-fra.com

Comment mettre en surbrillance un mot dans une chaîne en flutter par programmation

Existe-t-il un moyen de changer la couleur d'un mot particulier dans une chaîne?

Text("some long string")

maintenant je veux donner de la couleur à seulement long Word.

quelqu'un peut-il me dire comment procéder par programmation?

par exemple:-

Je suis depuis longtemps une chaîne vraiment longue et longue dans une variable, une longue

maintenant ici je veux séparer la longue Parole. Je peux séparer une chaîne simple pour mettre en surbrillance un mot, mais je ne sais pas comment trouver et mettre en surbrillance chacun de ces mots.

7
ketiwu

Voici mon code.

class HighlightText extends StatelessWidget {
  final String text;
  final String highlight;
  final TextStyle style;
  final Color highlightColor;

  const HighlightText({
    Key key,
    this.text,
    this.highlight,
    this.style,
    this.highlightColor,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    String text = this.text ?? '';
    if ((highlight?.isEmpty ?? true) || text.isEmpty) {
      return Text(text, style: style);
    }

    List<TextSpan> spans = [];
    int start = 0;
    int indexOfHighlight;
    do {
      indexOfHighlight = text.indexOf(highlight, start);
      if (indexOfHighlight < 0) {
        // no highlight
        spans.add(_normalSpan(text.substring(start, text.length)));
        break;
      }
      if (indexOfHighlight == start) {
        // start with highlight.
        spans.add(_highlightSpan(highlight));
        start += highlight.length;
      } else {
        // normal + highlight
        spans.add(_normalSpan(text.substring(start, indexOfHighlight)));
        spans.add(_highlightSpan(highlight));
        start = indexOfHighlight + highlight.length;
      }
    } while (true);

    return Text.rich(TextSpan(children: spans));
  }

  TextSpan _highlightSpan(String content) {
    return TextSpan(text: content, style: style.copyWith(color: highlightColor));
  }

  TextSpan _normalSpan(String content) {
    return TextSpan(text: content, style: style);
  }
}

0
zhpoo

Vous pouvez utiliser ce plugin flutter plugin texte en surbrillance . C'est une assez bonne option pour essayer

0
leeCoder