我尝试将Textformfield的第一个字母大写,为此我使用
textCapitalization: TextCapitalization.words,
但它不适用于Textformfield,而适用于textfield请帮助如何做到这一点。
Textformfield
textfield
hyrbngr71#
尝试下面的代码,希望它对你有帮助。
TextCapitalization.words
TextCapitalization.characters
TextCapitalization.sentences
TextCapitalization.none
您的小工具:
TextField( textCapitalization: TextCapitalization.words, decoration: InputDecoration( border: OutlineInputBorder( borderRadius: BorderRadius.circular(10), ), prefixIcon: Icon( Icons.search, ), hintText: 'Search', ), ),
您的结果屏幕-〉x1c 0d1x
bfhwhh0e2#
您可以尝试使用大写格式器,在TextFormField中,您只需在输入格式器部分使用UpperCaseTextFormatter类
TextFormField
UpperCaseTextFormatter
TextFormField( controller: _textEditingController, inputFormatters: <TextInputFormatter>[ UpperCaseTextFormatter() ], )
上方文字格式化程式
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 ""; return "${value[0].toUpperCase()}${value.substring(1).toLowerCase()}"; }
输出:
a64a0gku3#
TextFormField( textCapitalization: TextCapitalization.words, ),
这将我们在TextFormField中键入的每个单词的首字母大写。在设置textCapitalization之后,尝试在您的模拟器或设备示例上重新构建,然后再次检查。
9w11ddsr4#
若要使其与TextFormField一起使用,必须添加
textCapitalization: TextCapitalization.sentences // Capital first letter keyboardType: TextInputType.text,
例如使用keyboardType: TextInputType.name,则它将不起作用。
keyboardType: TextInputType.name
3vpjnl9f5#
Jahidul Islam的答案对我不起作用,因为我需要大写一个句子中的所有单词。textCapitalization属性没有完成这项工作,因为它只是提示用户自动大写键盘,而我的要求是输入必须大写。所以我需要自己实现它,使用Jahidul提供的基本TextEditingValue。这改变了输入,所以用户不能违反我们对这个字段的要求。希望它对其他人有所帮助。
textCapitalization
TextEditingValue
class UpperCaseTextFormatter extends TextInputFormatter { @override TextEditingValue formatEditUpdate( TextEditingValue oldValue, TextEditingValue newValue) { return TextEditingValue( text: capitalizeAllWordsInFullSentence(newValue.text), // text: capitalizeAllWordsInFullSentence(newValue.text), selection: newValue.selection, ); } } String capitalizeAllWordsInFullSentence(String str) { int i; String constructedString = ""; for (i = 0; i < str.length; i++) { if (i == 0) { constructedString += str[0].toUpperCase(); } else if (str[i - 1] == ' ') { // mandatory to have index>1 ! constructedString += str[i].toUpperCase(); } else { constructedString += str[i]; } } // print('constructed: $constructedString'); return constructedString; } String capitalize1Word(String value) { if (value.trim().isEmpty) return ""; return "${value[0].toUpperCase()}${value.substring(1).toLowerCase()}"; }
tvokkenx6#
只是编译Safeela Nasarin答案,它工作正常。只需确保使用嵌入式仿真器键盘或设备嵌入式键盘(取决于您的情况)。它不适用于外部或计算机键盘。
qni6mghb7#
如果您有TextFormField而不是TextField,请使用:textCapitalization: TextCapitalization.sentences这将使第一个字母大写。与以下内容一起使用:
textCapitalization: TextCapitalization.sentences
keyboardType: TextInputType.text,
7条答案
按热度按时间hyrbngr71#
尝试下面的代码,希望它对你有帮助。
TextCapitalization.words
TextCapitalization.characters
TextCapitalization.sentences
的第一个字母大写TextCapitalization.none
的默认小写字母您的小工具:
您的结果屏幕-〉x1c 0d1x
bfhwhh0e2#
您可以尝试使用大写格式器,在
TextFormField
中,您只需在输入格式器部分使用UpperCaseTextFormatter
类上方文字格式化程式
输出:
a64a0gku3#
这将我们在TextFormField中键入的每个单词的首字母大写。
在设置textCapitalization之后,尝试在您的模拟器或设备示例上重新构建,然后再次检查。
9w11ddsr4#
若要使其与TextFormField一起使用,必须添加
例如使用
keyboardType: TextInputType.name
,则它将不起作用。3vpjnl9f5#
Jahidul Islam的答案对我不起作用,因为我需要大写一个句子中的所有单词。
textCapitalization
属性没有完成这项工作,因为它只是提示用户自动大写键盘,而我的要求是输入必须大写。所以我需要自己实现它,使用Jahidul提供的基本
TextEditingValue
。这改变了输入,所以用户不能违反我们对这个字段的要求。希望它对其他人有所帮助。
tvokkenx6#
只是编译Safeela Nasarin答案,它工作正常。
只需确保使用嵌入式仿真器键盘或设备嵌入式键盘(取决于您的情况)。它不适用于外部或计算机键盘。
qni6mghb7#
如果您有TextFormField而不是TextField,请使用:
textCapitalization: TextCapitalization.sentences
这将使第一个字母大写。与以下内容一起使用: