I need a numberInputKeyboard which only has numbers (without decimal symbol). I have tried with keyboardType: TextInputType.numberWithOptions(decimal: false)
but still this dosen't help me

- 203
- 4
- 8
4 Answers
One answer recommends using a BlacklistingTextInputFormatter
which certainly works in your case with English locale. This however might not work with other locales which use a ,
instead of a .
as decimal seperator.
So I'd recommend using a WhitelistingTextInputFormatter
:
import "package:flutter/services.dart";
TextFormField(
keyboardType: TextInputType.number,
inputFormatters: [WhitelistingTextInputFormatter.digitsOnly],
)
This will only allows the digits [0-9]
.
UPDATE:
The WhitelistingTextInputFormatter
as been renamed! The following is the up-to date version and no longer deprecated by FilteringTextInputFormatter.allow
and provides a shortcut for the digits as well:
import "package:flutter/services.dart";
TextFormField(
keyboardType: TextInputType.number,
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
)

- 6,710
- 4
- 39
- 63
-
1Most Simpler.. Makes my work much easier..! Thank you Bro – Santhosh Aug 21 '19 at 09:39
-
This is cleaner as opposed to doing custom validations. – wamae May 19 '21 at 11:52
BlacklistingTextInputFormatter and WhitelistingTextInputFormatter are deprecated. If you want to admit digits only, you could use:
FilteringTextInputFormatter.digitsOnly
If you want to admit numbers with decimal point:
FilteringTextInputFormatter.allow(RegExp(r'^(\d+)?\.?\d{0,2}')

- 1,134
- 7
- 35
First Approach :-
As per this stackoverflow answer you must have to create your custom keyboard for it.
Android - is it possible to hide certain characters from the soft keyboard?
Second Approach :-
You can do black list that stuff with RegExp
, in this case you can't input dot(.).
For more you can refer this : https://api.flutter.dev/flutter/services/TextInputFormatter-class.html
body: Center(
child: TextFormField(
decoration: InputDecoration(
labelText: "Title",
suffixIcon: GestureDetector(
onTap: () {
setState(() {
});
},
child: Icon(Icons.clear),
)),
inputFormatters: [
FilteringTextInputFormatter.deny(RegExp("[.]")),
],
)));

- 1,826
- 2
- 22
- 26

- 13,525
- 8
- 62
- 84
-
2Great..! It works like charm. But you have to import ```package:flutter/services.dart``` before using it. Thank you..!! – Santhosh Aug 21 '19 at 09:26
To aport this thread i did this, helped with the link provided by Amit Prajapati, its a but more manual but in my case worked perfectly
inputFormatters: [
TextInputFormatter.withFunction((oldValue, newValue) {
if (textInputType.decimal == true) {
return newValue.copyWith(
text: newValue.text.replaceAll(RegExp(r"\,"), "."),
);
}
return newValue;
}),
],
EDIT: textInputType
is a variable for a custom TextField

- 169
- 1
- 4