有沒有辦法自動將文本欄位的第一個單詞設為大寫,之后我們可以自由地將第二個單詞設為大寫或我們選擇的小寫,例如:- 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()
],
),
這是我一直在使用的代碼,它使第一個單詞大寫,但我們無法將第二個或任何單詞大寫,在此之后需要一些幫助,謝謝。
uj5u.com熱心網友回復:
要將每個單詞大寫,您可以使用以下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
uj5u.com熱心網友回復:
你可以試試這個把第一個字母變成大寫
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));
}
}
)
uj5u.com熱心網友回復:
閱讀這個問題的標題讓我覺得您只想將 TextFormField 中的第一個單詞大寫,而不是每個單詞?如果是這樣,為什么不直接使用:
textCapitalization: TextCapitalization.sentences
之后您仍然可以自由選擇是否大寫后續單詞。需要注意的是,在一個句點 ( .) 之后,默認情況下您會得到一個大寫的單詞,但可以明顯地改變它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/497985.html
