我想在值更改时修剪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(),
),
);
如果我仅键入空格,但是在第一个单词后键入空格后,上面的代码可以正常工作,光标移至第一个字符。有什么建议吗?
谢谢!
答案 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;
}
}
如果您有更好的解决方案,请告诉我。谢谢!