是否有一种方法可以自动大写textformfield的第一个单词,也可以在后面使用大写或小写字母 &



是否有一种方法可以自动使文本表单字段的第一个单词大写,然后我们可以自由地使第二个单词大写或小我们选择的Ex:- Steven Jhons

class UpperCaseTextFormatter extends TextInputFormatter {
@override
TextEditingValue formatEditUpdate(
TextEditingValue oldValue, TextEditingValue newValue) {
return TextEditingValue(
text: capitalize(newValue.text),
selection: newValue.selection,
);
}
}
String capitalize(String value) {
if (value.trim().isEmpty) {
return "";
} else if (value.isNotEmpty) {
return "${value[0].toUpperCase()}${value.substring(1).toLowerCase()}";
} else {
return "";
}
}

在textformfield中像这样调用

TextFormField(
decoration:
const InputDecoration(hintText: "Name"),
controller: nameController,
validator: (value) {
if (value == null || value.isEmpty) {
return "Please enter your name";
} else {
return null;
}
},
textCapitalization: TextCapitalization.words,
inputFormatters: <TextInputFormatter>[
UpperCaseTextFormatter()
],
),

这是我一直在使用的代码,它使第一个单词大写,但我们不能使第二个或任何单词大写之后,需要一些帮助这里谢谢。

利用每一个字,您可以使用的帮助substring方法:

String capitalize(String str) {
return str
.split(' ')
.map((word) => word.substring(0, 1).toUpperCase() + word.substring(1))
.join(' ');
}


print(capitalize('john doe')); // John Doe

您可以尝试将第一个字母改为大写


TextFormField(
controller: _textEditingController,
onChange: (val){
if(_textEditingController.length > 0)
{
_textEditingController.text =  "${_textEditingController[0].toUpperCase()}${ 
_textEditingController.substring(1)}";
_textController.selection = TextSelection.fromPosition(TextPosition(offset: _textController.text.length));
}
}
)

阅读这个问题的标题让我觉得你只是想利用TextFormField第一个单词,并不是每一个单词?如果是这样,为什么不直接使用:

textCapitalization: TextCapitalization.sentences

之后您仍然可以自由地将后面的单词大写或不大写。需要注意的是,在一个句号(.)之后,默认情况下您将得到一个大写的单词,但可以明显地更改它。

相关内容