Flutter에서 숫자 입력 필드를 만드는 방법은 무엇입니까?


126

Flutter에서 숫자 키보드를 여는 입력 필드를 만드는 방법을 찾을 수 없습니다. Flutter 머티리얼 위젯으로 가능합니까? 일부 github 토론에서 이것이 지원되는 기능이라는 것을 나타내는 것처럼 보이지만 이에 대한 문서를 찾을 수 없습니다.


키보드 유형 추가 keyboardType : TextInputType.number,
Ishan Fernando

답변:


250

다음을 사용 하여 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 수레 쉬
Thirumal Govindaraj

5
잊지 마세요 => import 'package : flutter / services.dart';
Wilmer

점, 공백, 이모티콘 붙여 넣기 허용
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)을 붙여 넣는 것을 피하는 것이 좋습니다. 감사합니다.
Mariano Argañaraz

2
이것은 Flutter_web에서도 잘 작동합니다. flutter_web에있는 이유는 숫자 키보드를 강제 할 수 없으므로 제한이 자연스러운 옵션입니다. 감사합니다 @ BilalŞimşek
Abhilash CHANDRAN

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
    ...

오류 발생 : 지역 변수 num은 선언되기 전에 참조 할 수 없습니다
kashlo

좋습니다 num. 변수 이름 이 작동하지 않습니다. 이름을 변경해야합니다
Günter Zöchbauer

1
문서에서 : onError 매개 변수는 더 이상 사용되지 않으며 제거됩니다. num.parse (string, (string) {...}) 대신 num.tryParse (string) ?? (...).
kashlo

13

텍스트 필드에서 화폐 형식 으로 작업해야하는 사람들을 위해 :

사용하려면 :, (쉼표) 및. (기간)

기호 차단 :-(하이픈, 빼기 또는 대시)

뿐만 아니라 : ⌴ (공백)

TextField에서 다음 코드를 설정하십시오.

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

심볼 하이픈과 공백은 키보드에 계속 표시되지만 차단됩니다.


하나의 쉼표 또는 마침표 만 허용하는 방법을 알고 있습니까?
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.