Flutter'da sayı giriş alanı nasıl oluşturulur?


128

Flutter'da sayısal klavye açacak bir giriş alanı oluşturmanın bir yolunu bulamıyorum. Bu, Flutter malzeme gereçleriyle mümkün mü? Bazı github tartışmaları bunun desteklenen bir özellik olduğunu belirtiyor gibi görünüyor, ancak bununla ilgili herhangi bir belge bulamıyorum.


klavye türü ekle keyboardType: TextInputType.number,
Ishan Fernando

Yanıtlar:


252

Numarayı TextField için keyboardType olarak belirtebilirsiniz :

keyboardType: TextInputType.number

Main.dart dosyamı kontrol edin

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
          ),
        ],
      )),
    );
  }
}

görüntü açıklamasını buraya girin


3
Harika, teşekkürler! Flutter kurucu belgelerinin bu kadar kötü biçimlendirilmemesini gerçekten isterdim. Bunu tamamen kaçırdım.
Janne Annala

8
Ama o alana Metinleri (Karakterleri) yapıştırabilirim, başka seçeneğiniz var mı? @Rissmon Suresh
Thirumal Govindaraj

5
unutmayın => 'paket: flutter / services.dart'ı içe aktar';
Wilmer

Nokta, boşluk ve yapıştırma emoji koymanıza izin verir
agilob

5
inputFormatters: [WhitelistingTextInputFormatter.digitsOnly] burada da gereklidir, çünkü cevapta virgül ve nokta hala kabul edilebilir.
Ravi Yadav

80

Girdi olarak yalnızca sayı yapmak TextFieldveya TextFormFieldkabul etmek isteyenler için şu kod bloğunu deneyin:

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
Bu, kullanıcının rakam olmayan dizeleri (inputFormatters) yapıştırmasını önlemek için memnuniyetle karşılanır, teşekkürler.
Mariano Argañaraz

2
Bu Flutter_web'de bile iyi çalışıyor. Flutter_web içinde olmanın nedeni sayısal bir klavyeyi uygulayamıyoruz, bu nedenle kısıtlama doğal seçenektir. Teşekkürler @ BilalŞimşek
Abhilash Chandran

1
Bu mükemmel bir çözüm!
Kavinda Jayakody

31

Bu seçenek sayesinde, başka bir karakteri numarasız olarak kesinlikle kısıtlayabilirsiniz.

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

Yukarıdaki seçeneği kullanmak için bunu içe aktarmanız gerekir

import 'package:flutter/services.dart';

bu tür bir seçeneği kullanarak kullanıcı bir metin alanına karakter yapıştıramaz


bu gerçek kapsamlı cevaptır. formatlayıcılar olmadan sadece klavyeyi ayarlamak yeterli değil.
shababhsiddique

sadece ondalık ve rakam istersem. "." nasıl eklenir biçimlendiricinin beyaz listesine dahil mi?
shababhsiddique

19

Klavyeyi ve bir doğrulayıcıyı ayarlayın

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

Hata var: Yerel değişken num bildirilmeden önce başvurulamaz
kashlo

Tamam, numdeğişkenin adı çalışmıyor. İsmin değiştirilmesi gerekiyor
Günter Zöchbauer

1
Dokümanlardan: onError parametresi kullanımdan kaldırıldı ve kaldırılacak. Num.parse (string, (string) {...}) yerine num.tryParse (string) kullanmalısınız ?? (...).
kashlo

13

Metin alanlarında para formatı ile çalışması gerekenler için :

Yalnızca kullanmak için:, (virgül) ve. (nokta)

ve şu simgeyi engelleyin: - (tire, eksi veya tire)

ve ayrıca: ⌴ (boş alan)

TextField'ınızda aşağıdaki kodu ayarlamanız yeterlidir:

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

Simbols tire ve boşluk klavyede görünmeye devam edecek, ancak engellenecektir.


Yalnızca bir virgül veya noktaya nasıl izin verileceğini biliyor musunuz?
Heddie Franco



2

KeyboardType Parametresini kullanarak Giriş Türünü kolayca değiştirebilirsiniz ve birçok olanağa sahip olursunuz TextInputType belgelerini kontrol edin, böylece numarayı veya telefon değerini kullanabilirsiniz

 new TextField(keyboardType: TextInputType.number)

2

Bunu deneyebilirsiniz:

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

1

keyboardType: TextInputType.number odakta bir sayısal tuş takımı açar, kullanıcı başka bir şey girdiğinde / geçtiğinde metin alanını temizlerdim.

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

İşte Android'deki gerçek Telefon klavyesinin kodu:

Anahtar Bölüm: 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

İşte sayısal klavye için kod: keyboardType: TextInputType.phone Bu kodu metin alanına eklediğinizde sayısal klavye açılacaktır.

  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'a hoş geldiniz! Lütfen kodla nasıl çalıştığına dair en azından biraz bağlam ekleyin.
zixuan

0

Sayı girişi veya sayısal klavye için keyboardType'ı kullanabilirsiniz: TextInputType.number

TextFormField(
  decoration: InputDecoration(labelText:'Amount'),
    controller: TextEditingController(
  ),
  validator: (value) {
    if (value.isEmpty) {
      return 'Enter Amount';
    }
  },
  keyboardType: TextInputType.number
)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.