I want to allow the user to only put maximum of 5 numbers between 1 and 10.000, but this TextFormField
is not required and should not be submitted through Form
validation, but I want to let the user know if he is adding this field, that he can not exceed 10.000 and he must put only numbers from 1 to 10.000. The code for the TextFormField
:
TextFormField(
keyboardType: TextInputType.number,
controller: _number,
inputFormatters: <TextInputFormatter>[
FilteringTextInputFormatter.digitsOnly //I have set this so the input is only numbers/digits
],
decoration: kTextFieldDecoration.copyWith(
hintText: 'Enter number between 1 and 10.000',
labelText: 'Number from 1 to 10.000',
),
),
I'm not sure how to achieve this, I used regex validation for the rest of the fields, but since this field is not required, I can't validate it through Form
validation. Any form of help is appreciated. Thanks in advance!
May try the code below, for your reference https://stackoverflow.com/a/68072967/7972633
Updated version 1
class NumericalRangeFormatter extends TextInputFormatter {
final double min;
final double max;
NumericalRangeFormatter({required this.min, required this.max});
@override
TextEditingValue formatEditUpdate(
TextEditingValue oldValue,
TextEditingValue newValue,
) {
if (newValue.text == '') {
return newValue;
} else if (int.parse(newValue.text) < min) {
return TextEditingValue().copyWith(text: min.toStringAsFixed(5));
} else {
return int.parse(newValue.text) > max ? oldValue : newValue;
}
}
}
keyboardType: TextInputType.numberWithOptions(),
inputFormatters: [
LengthLimitingTextInputFormatter(5) // only allow 5 digit number
],