Flutter 富尔特:如何更改文本字段中特定字符之前所有文本的颜色?

Flutter 富尔特:如何更改文本字段中特定字符之前所有文本的颜色?,flutter,textfield,flutter-widget,Flutter,Textfield,Flutter Widget,我正在尝试在Flatter应用程序中创建一个TextField小部件,允许用户插入如下文本字符串: 用户-0123456789 其中,文本用户(字符“-”之前的所有文本)应为红色,其他文本应为黑色 现在的问题是,我不知道有什么方法可以做到这一点。经过一些研究,我发现我可以通过使用RichText小部件使用普通文本小部件来实现这一点。但是,我不知道TextField小部件有任何类似的小部件。请帮助我摆脱这种情况。我可以按照pskink的建议,使用if语句创建两个TextSpan来解决这个问题 My

我正在尝试在Flatter应用程序中创建一个TextField小部件,允许用户插入如下文本字符串:

用户-0123456789

其中,文本用户(字符“-”之前的所有文本)应为红色,其他文本应为黑色


现在的问题是,我不知道有什么方法可以做到这一点。经过一些研究,我发现我可以通过使用RichText小部件使用普通文本小部件来实现这一点。但是,我不知道TextField小部件有任何类似的小部件。请帮助我摆脱这种情况。

我可以按照pskink的建议,使用if语句创建两个TextSpan来解决这个问题

MyTextController类:

class MyTextController extends TextEditingController {
  @override
  TextSpan buildTextSpan({TextStyle style, bool withComposing}) {
    List<InlineSpan> children = [];
    if(text.contains('-')){
      children.add(TextSpan(style: TextStyle(color: Colors.redAccent), text: text.substring(0, text.indexOf('-'))));
      children.add(TextSpan(text: text.substring(text.indexOf('-'))));
    } else {
      children.add(TextSpan(style: TextStyle(color: Colors.redAccent), text: text));
    }
    return TextSpan(style: style, children: children);
  }
}
关于光标错位错误的更新:
我无法找到此错误的解决方案。如果我在不久的将来找到它,我会在这里更新它。我所做的只是隐藏光标本身,这样它就不会被注意到。

此链接中的解决方案是为特定的关键字着色。但是,我没有像“苹果”这样的特定关键词。文本“USER”可以是任意长度的任意内容。如果您能告诉我如何处理我的问题,那将非常有帮助。请使用
String.indexOf()
方法查找
'-'
字符的索引,并返回有效的
TextSpan
很抱歉回复太晚,但我所在地区的互联网被政府关闭了一周。现在有问题了,我对正则表达式和flatter没有太多经验。我是弗利特的初学者。嘿@pskink!所有这些都可以很好地工作,但在显示多个文本跨度时存在一些问题。每当在TextField中添加多个TextSpans时,所有文本都向下移动到特定像素。它看起来不错,文本在文本字段的中心,直到我在文本字段中输入。当我这样做时,它会显示两个文本跨度,它们不在中间。他们改变了方向。我不知道为什么会这样?而且光标似乎也放错地方了。它显示在开始部分。我不知道你的意思。只有在文本字段中添加两个文本跨距而不是一个文本跨距时,才会出现此所有错误。使用TextAlignVertical解决了此问题
TextFormField(
    keyboardType: TextInputType.text,
    controller: MyTextController(),
),