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, ); } }