#flutter #dart #textfield
Вопрос:
Возможно ли такое?
пример: «Мой любимый фильм — «Матрица». И я думаю… »
подобные вопросы задавались и раньше, но они для простой прописной буквы первой буквы первого слова и не более
эти коды просто работали для первой буквы первого слова и не могут понять «.»
extension CapExtension on String {
String get inCaps =>
this.length > 0 ? '${this[0].toUpperCase()}${this.substring(1)}' : '';
String get capitalizeFirstofEach => this
.replaceAll(RegExp(' '), ' ')
.split(" ")
.map((str) => str.inCaps)
.join(" ");
}
class CapitalCaseTextFormatter extends TextInputFormatter {
@override
TextEditingValue formatEditUpdate(
TextEditingValue oldValue, TextEditingValue newValue) {
return TextEditingValue(
text: newValue.text.inCaps,
selection: newValue.selection,
);
}
}
TextFormField(
inputFormatters: [
CapitalCaseTextFormatter()
]
)
Ответ №1:
Используйте это для заглавной буквы каждого первого слова предложения
extension CapExtension on String {
String capitalizeSentence() {
// Each sentence becomes an array element
var sentences = this.split('.');
// Initialize string as empty string
var output = '';
// Loop through each sentence
for (var sen in sentences) {
// Trim leading and trailing whitespace
var trimmed = sen.trim();
// Capitalize first letter of current sentence
var capitalized = "${trimmed[0].toUpperCase() trimmed.substring(1)}";
// Add current sentence to output with a period
output = capitalized ". ";
}
return output;
}
}
// Форматирование ввода текста
class CapitalCaseTextFormatter extends TextInputFormatter {
@override
TextEditingValue formatEditUpdate(
TextEditingValue oldValue, TextEditingValue newValue) {
return TextEditingValue(
text: newValue.text.capitalizeSentence,
selection: newValue.selection,
);
}
}
Комментарии:
1. это не работает для меня, внутри
inputFormatters: [ CapitalCaseTextFormatter() ]
можно напечатать только одну буквуTextFormField
. например: «А».2. когда я включаю его
_contentController.text.capitalizeSentence
, это работает. но генерируйте сентенцию вот так: Хей. Как. Являются. Вы?.3. я думаю, ты что-то не так понял, это не он.
4. @Husen обнаружил вашу проблему, потому что после каждого слова он вызывает значение с заглавной буквы и заканчивается точкой (.), которую вы можете вызвать с помощью
TextInputFormatter
5. Я думаю, что его нужно слушать, набирая».», не добавляйте «.» в конец предложения.
Ответ №2:
Добавить textCapitalization
свойство
TextFormField(
textCapitalization: TextCapitalization.sentences,
inputFormatters: [
CapitalCaseTextFormatter() //no need of it then
]
)
Комментарии:
1. Как я могу сделать это в режиме реального времени при вводе текста внутри
TextFormField
?2. добавление капитализации текста отражает изменения при вводе текста и начале нового предложения.