如何在flutter中实现TextFormField首字母大写

klr1opcd  于 2022-11-25  发布在  Flutter
关注(0)|答案(7)|浏览(190)

我尝试将Textformfield的第一个字母大写,为此我使用

textCapitalization: TextCapitalization.words,

但它不适用于Textformfield,而适用于textfield
请帮助如何做到这一点。

hyrbngr7

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

bfhwhh0e

bfhwhh0e2#

您可以尝试使用大写格式器,在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()}";
}

输出:

a64a0gku

a64a0gku3#

TextFormField(
       textCapitalization: TextCapitalization.words,
       ),

这将我们在TextFormField中键入的每个单词的首字母大写。
在设置textCapitalization之后,尝试在您的模拟器或设备示例上重新构建,然后再次检查。

9w11ddsr

9w11ddsr4#

若要使其与TextFormField一起使用,必须添加

textCapitalization: TextCapitalization.sentences // Capital first letter
keyboardType: TextInputType.text,

例如使用keyboardType: TextInputType.name,则它将不起作用。

3vpjnl9f

3vpjnl9f5#

Jahidul Islam的答案对我不起作用,因为我需要大写一个句子中的所有单词。textCapitalization属性没有完成这项工作,因为它只是提示用户自动大写键盘,而我的要求是输入必须大写。
所以我需要自己实现它,使用Jahidul提供的基本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()}";
}
tvokkenx

tvokkenx6#

只是编译Safeela Nasarin答案,它工作正常。
只需确保使用嵌入式仿真器键盘或设备嵌入式键盘(取决于您的情况)。它不适用于外部或计算机键盘。

qni6mghb

qni6mghb7#

如果您有TextFormField而不是TextField,请使用:
textCapitalization: TextCapitalization.sentences
这将使第一个字母大写。与以下内容一起使用:

keyboardType: TextInputType.text,

相关问题