如何在textformfield onchange值上修剪文本

时间:2019-09-12 08:49:05

标签: validation flutter

我想在值更改时修剪TextFormField上的文本,以供用户输入名称。用户只允许输入全名,单词之间没有多余的空格。 (例如:我的名字Isromeo)

我已经在使用TextEditingController,但仍无法正常工作。这是我的代码段,可以实现我的目标

final myController = TextEditingController();

...

return new TextFormField(
      onChanged: (value){
        myController..text = value.trim()
          ..selection = TextSelection.collapsed(offset: myController.text.length);
      },
      controller: myController,
      keyboardType: TextInputType.phone,
      style: FormStyles.inputStyles(),
      decoration: InputDecoration(
        focusedBorder: UnderlineInputBorder(borderSide: BorderSide(color: Color(0xFFCACCCF))),
        hintText: 'hint',
        contentPadding: EdgeInsets.only(bottom: 8),
        hintStyle: FormStyles.hintStyles(),
        enabledBorder: UnderlineInputBorder(borderSide: BorderSide(color: Color(0xFFCACCCF)),),
        errorStyle: FormStyles.errorStyles(),
      ),
    );

如果我仅键入空格,但是在第一个单词后键入空格后,上面的代码可以正常工作,光标移至第一个字符。有什么建议吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用BlacklistingTextInputFormatter使用RegExp来输入文本。

      TextFormField(
        decoration: InputDecoration(
            labelText: "Title",
        ),
        inputFormatters: [
          BlacklistingTextInputFormatter(RegExp("[ ]"))
        ],
      )

有关更多信息,请参见:https://api.flutter.dev/flutter/services/TextInputFormatter-class.html

答案 1 :(得分:0)

所以我有自己的解决方案,也许不是最好的,但是至少可以完美地工作! 我决定创建自己的输入格式化程序,并使用RegExp来实现我的目标。 这是我的自定义格式程序

class NameInputFormatter extends TextInputFormatter{
  @override
  TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditingValue newValue) {

    if(newValue.text.length > 0){
      TextEditingValue textEditingValue = newValue.copyWith(
          text: newValue.text.replaceAll(new RegExp(r"\s+"), ' ')
      );

      return TextEditingValue(
        text: textEditingValue.text,
        selection: TextSelection.collapsed(
          offset: textEditingValue.text.length,
        ),
      );
    }

    return newValue;

  }

}

如果您有更好的解决方案,请告诉我。谢谢!