Come creare un campo di immissione del numero in Flutter?


127

Non riesco a trovare un modo per creare un campo di input in Flutter che aprirebbe una tastiera numerica. È possibile con i widget dei materiali Flutter? Alcune discussioni su GitHub sembrano indicare che questa è una funzionalità supportata ma non sono in grado di trovare alcuna documentazione al riguardo.


aggiungi il tipo di tastiera keyboardType: TextInputType.number,
Ishan Fernando il

Risposte:


251

È possibile specificare il numero come keyboardType per TextField utilizzando:

keyboardType: TextInputType.number

Controlla il mio file 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
          ),
        ],
      )),
    );
  }
}

inserisci qui la descrizione dell'immagine


3
Fantastico, grazie! Vorrei davvero che la documentazione del costruttore Flutter non fosse formattata così male. Ho perso completamente questo.
Janne Annala

8
Ma posso incollare i testi (caratteri) su quel campo hai altre opzioni? @Rissmon Suresh
Thirumal Govindaraj

5
non dimenticare => import 'package: flutter / services.dart';
Wilmer

Permette di mettere punto, spazio e incollare emoji
agilob

5
inputFormatters: [WhitelistingTextInputFormatter.digitsOnly] è richiesto anche qui, poiché virgola e punto possono ancora essere accettati qui nella risposta.
Ravi Yadav

80

Per coloro che stanno cercando di creare TextFieldo TextFormFieldaccettare solo numeri come input, prova questo blocco di codice:

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
Questo è il benvenuto per evitare che l'utente incolli stringhe non numeriche (inputFormatters), grazie.
Mariano Argañaraz

2
Funziona bene anche in Flutter_web. Il motivo per cui in flutter_web non possiamo applicare una tastiera numerica, quindi la restrizione è l'opzione naturale. Grazie @ BilalŞimşek
Abhilash Chandran

1
Questa è la soluzione perfetta!
Kavinda Jayakody

31

Attraverso questa opzione puoi restringere rigorosamente un altro carattere senza numero.

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

Per utilizzare l'opzione sopra devi importarlo

import 'package:flutter/services.dart';

utilizzando questo tipo di opzione l'utente non può incollare il carattere in un campo di testo


questa è la risposta esauriente effettiva. senza i formattatori la sola impostazione della tastiera non è sufficiente.
shababhsiddique

se voglio solo decimali e cifre. come si aggiunge il "." nella whitelist del formattatore?
shababhsiddique

19

Imposta la tastiera e un validatore

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

Errore: impossibile fare riferimento alla variabile locale num prima che venga dichiarata
kashlo

Ok, il nome numdella variabile non funziona. Il nome deve essere cambiato
Günter Zöchbauer

1
Dai documenti: il parametro onError è deprecato e verrà rimosso. Invece di num.parse (string, (string) {...}), dovresti usare num.tryParse (string) ?? (...).
kashlo

13

Per coloro che hanno bisogno di lavorare con il formato denaro nei campi di testo:

Da utilizzare solo :, (virgola) e. (periodo)

e blocca il simbolo: - (trattino, meno o trattino)

così come: ⌴ (spazio vuoto)

Nel tuo TextField, imposta il codice seguente:

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

Il trattino e lo spazio dei simboli appariranno ancora sulla tastiera, ma verranno bloccati.


Sai come consentire solo una virgola o un punto?
Heddie Franco il



2

Puoi facilmente cambiare il tipo di input usando il parametro keyboardType e hai molte possibilità controllare la documentazione TextInputType in modo da poter usare il numero o il valore del telefono

 new TextField(keyboardType: TextInputType.number)

2

Puoi provare questo:

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

1

keyboardType: TextInputType.number aprirebbe un tastierino numerico sullo stato attivo, cancellerei il campo di testo quando l'utente inserisce / supera qualsiasi altra cosa.

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

Ecco il codice per l'attuale tastiera del telefono su Android:

Parte fondamentale: 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

Ecco il codice per la tastiera numerica: keyboardType: TextInputType.phone Quando aggiungi questo codice nel campo di testo, si aprirà la tastiera numerica.

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

Benvenuto in Stack Overflow! Si prega di includere almeno un contesto di come funziona con il codice.
zixuan

0

Per l'inserimento di numeri o la tastiera numerica è possibile utilizzare keyboardType: TextInputType.number

TextFormField(
  decoration: InputDecoration(labelText:'Amount'),
    controller: TextEditingController(
  ),
  validator: (value) {
    if (value.isEmpty) {
      return 'Enter Amount';
    }
  },
  keyboardType: TextInputType.number
)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.