Flutterで数値入力フィールドを作成する方法は?


124

Flutterで数字キーボードを開く入力フィールドを作成する方法が見つかりません。これはFlutterマテリアルウィジェットで可能ですか?一部のgithubディスカッションは、これがサポートされている機能であることを示しているようですが、それに関するドキュメントを見つけることができません。


キーボードタイプkeyboardTypeを追加:TextInputType.number、
Ishan Fernando

回答:


246

次を使用して、TextFieldのkeyboardTypeとして番号を指定できます。

keyboardType: TextInputType.number

main.dartファイルを確認する

import 'package:flutter/material.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return new MaterialApp(
      home: new HomePage(),
      theme: new ThemeData(primarySwatch: Colors.blue),
    );
  }
}

class HomePage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return new HomePageState();
  }
}

class HomePageState extends State<HomePage> {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      backgroundColor: Colors.white,
      body: new Container(
          padding: const EdgeInsets.all(40.0),
          child: new Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          new TextField(
            decoration: new InputDecoration(labelText: "Enter your number"),
            keyboardType: TextInputType.number,
            inputFormatters: <TextInputFormatter>[
    WhitelistingTextInputFormatter.digitsOnly
], // Only numbers can be entered
          ),
        ],
      )),
    );
  }
}

ここに画像の説明を入力してください


3
素晴らしい、ありがとう!Flutterコンストラクターのドキュメントがそれほどひどくフォーマットされていないことを本当に望みます。これは完全に見逃した。
Janne Annala、

8
しかし、そのフィールドにテキスト(文字)を貼り付けることができます。他のオプションはありますか?@Rissmon Suresh
Thirumal Govindaraj

5
忘れないでください=> import 'package:flutter / services.dart';
ウィルマー

ドット、スペース、絵文字の貼り付けが可能
agilob

5
inputFormatters:[WhitelistingTextInputFormatter.digitsOnly]もここで必要です。これは、ここではカンマとドットを回答に含めることができるためです。
Ravi Yadav

79

入力として数値のみを作成TextFieldまたはTextFormField受け入れることを探している人は、次のコードブロックを試してください。

TextFormField(
    controller: _controller,
    keyboardType: TextInputType.number,
    inputFormatters: <TextInputFormatter>[
        WhitelistingTextInputFormatter.digitsOnly
    ],
    decoration: InputDecoration(
        labelText:"whatever you want", 
        hintText: "whatever you want",
        icon: Icon(Icons.phone_iphone)
    )
)

3
これは、ユーザーが数字以外の文字列(inputFormatters)を貼り付けるのを避けるために歓迎されています。
MarianoArgañaraz19年

2
これはFlutter_webでもうまく機能します。flutter_webにある理由は数字キーボードを強制できないため、制限が自然なオプションです。おかげで@BilalŞimşek
Abhilashチャンドラン

1
これは完璧なソリューションです!
Kavinda Jayakody

31

このオプションを使用すると、番号のない別の文字を厳密に制限できます。

 inputFormatters: [WhitelistingTextInputFormatter.digitsOnly],
 keyboardType: TextInputType.number,

上記のオプションを使用するには、これをインポートする必要があります

import 'package:flutter/services.dart';

この種類のオプションを使用すると、ユーザーはテキストフィールドに文字を貼り付けることができません


これが実際の包括的な答えです。フォーマッタがなければ、キーボードを設定するだけでは不十分です。
shababhsiddique

小数と数字だけが必要な場合。「。」を追加する方法 フォーマッタのホワイトリストに?
shababhsiddique

19

キーボードとバリデーターを設定する

String numberValidator(String value) {
  if(value == null) {
    return null;
  }
  final n = num.tryParse(value);
  if(n == null) {
    return '"$value" is not a valid number';
  }
  return null;
}

new TextFormField(
    keyboardType: TextInputType.number, 
    validator: numberValidator, 
    textAlign: TextAlign.right
    ...

Gotエラー:ローカル変数numは宣言される前に参照できません
kashlo

さて、num変数の名前は機能しません。名前を変更する必要があります
ギュンターZöchbauer

1
ドキュメントから:onErrorパラメータは廃止され、削除されます。num.parse(string、(string){...})の代わりに、num.tryParse(string)を使用する必要がありますか?(...)
kashlo

13

テキストフィールドでお金の形式を使用する必要がある場合:

のみを使用するには:、(カンマ)、および。(限目)

記号をブロックします:-(ハイフン、マイナスまたはダッシュ)

同様に:⌴ (空白スペース)

TextFieldで、次のコードを設定するだけです。

keyboardType: TextInputType.numberWithOptions(decimal: true),
inputFormatters: [BlacklistingTextInputFormatter(new RegExp('[\\-|\\ ]'))],

記号のハイフンとスペースは引き続きキーボードに表示されますが、ブロックされます。


コンマまたはピリオドを1つだけ許可する方法を知っていますか?
Heddie Franco



2

keyboardTypeパラメータを使用して入力タイプを簡単に変更でき、多くの可能性がある ため、ドキュメントのTextInputTypeをチェックして、番号または電話の値を使用できるようにします。

 new TextField(keyboardType: TextInputType.number)

2

あなたはこれを試すことができます:

TextFormField(
     keyboardType: TextInputType.number,
     decoration: InputDecoration(
              prefixIcon: Text("Enter your number: ")
     ),
     initialValue: "5",
     onSaved: (input) => _value = num.tryParse(input),
),

1

keyboardType: TextInputType.number フォーカスのあるテンキーを開きます。ユーザーが何かを入力または貼り付けたときにテキストフィールドをクリアします。

keyboardType: TextInputType.number,
onChanged: (String newVal) {
    if(!isNumber(newVal)) {
        editingController.clear();
    }
}

// Function to validate the number
bool isNumber(String value) {
    if(value == null) {
        return true;
    }
    final n = num.tryParse(value);
    return n!= null;
}

1

Androidの実際の電話キーボードのコードは次のとおりです。

重要な部分: keyboardType: TextInputType.phone,

  TextFormField(
    style: TextStyle(
      fontSize: 24
    ),
    controller: _phoneNumberController,
    keyboardType: TextInputType.phone,
    decoration: InputDecoration(
      prefixText: "+1 ",
      labelText: 'Phone number'),
    validator: (String value) {
      if (value.isEmpty) {
        return 'Phone number (+x xxx-xxx-xxxx)';
      }
      return null;
    },
  ),

0

数値キーボードのコードは 次のとおりです。keyboardType:TextInputType.phone このコードをテキストフィールドに追加すると、数値キーボードが開きます。

  final _mobileFocus = new FocusNode();
  final _mobile = TextEditingController();


     TextFormField(
          controller: _mobile,
          focusNode: _mobileFocus,
          maxLength: 10,
          keyboardType: TextInputType.phone,
          decoration: new InputDecoration(
            counterText: "",
            counterStyle: TextStyle(fontSize: 0),
            hintText: "Mobile",
            border: InputBorder.none,
            hintStyle: TextStyle(
              color: Colors.black,
                fontSize: 15.0.
            ),
          ),
          style: new TextStyle(
              color: Colors.black,
              fontSize: 15.0,
           ),
          );

Stack Overflowへようこそ!それがコードでどのように機能するかの少なくともいくつかのコンテキストを含めてください。
zixuan

0

数値入力または数字キーボードの場合、keyboardType:TextInputType.numberを使用できます。

TextFormField(
  decoration: InputDecoration(labelText:'Amount'),
    controller: TextEditingController(
  ),
  validator: (value) {
    if (value.isEmpty) {
      return 'Enter Amount';
    }
  },
  keyboardType: TextInputType.number
)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.