You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30 lines
751 B
30 lines
751 B
import 'package:flutter/services.dart';
|
|
|
|
class FirstCharUppercaseFormatter extends TextInputFormatter {
|
|
const FirstCharUppercaseFormatter();
|
|
|
|
@override
|
|
TextEditingValue formatEditUpdate(
|
|
TextEditingValue oldValue,
|
|
TextEditingValue newValue,
|
|
) {
|
|
final text = newValue.text;
|
|
if (text.isEmpty) return newValue;
|
|
|
|
// Find first non-space char
|
|
final i = text.indexOf(RegExp(r'\S'));
|
|
if (i == -1) return newValue;
|
|
|
|
final first = text[i];
|
|
final upper = first.toUpperCase();
|
|
if (first == upper) return newValue;
|
|
|
|
final newText = text.replaceRange(i, i + 1, upper);
|
|
|
|
return newValue.copyWith(
|
|
text: newText,
|
|
selection: newValue.selection,
|
|
composing: TextRange.empty,
|
|
);
|
|
}
|
|
} |