13

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

Santhosh
  • 203
  • 4
  • 8

4 Answers4

32

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],
)
DAG
  • 6,710
  • 4
  • 39
  • 63
3

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}')
David L
  • 1,134
  • 7
  • 35
2

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("[.]")),
            ],
        )));
Timo Bähr
  • 1,826
  • 2
  • 22
  • 26
Amit Prajapati
  • 13,525
  • 8
  • 62
  • 84
  • 2
    Great..! 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
1

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