293 votes

Comment créer un champ de saisie numérique dans Flutter ?

Je n'arrive pas à trouver un moyen de créer un champ de saisie dans Flutter qui ouvrirait un clavier numérique. Est-ce possible avec les widgets matériels de Flutter ? Certaines discussions sur github semblent indiquer qu'il s'agit d'une fonctionnalité prise en charge, mais je ne parviens pas à trouver de documentation à ce sujet.

1 votes

Ajouter le type de clavier keyboardType : TextInputType.number,

511voto

Rissmon Suresh Points 1888

Vous pouvez spécifier le nombre comme keyboardType pour le Champ de texte en utilisant :

keyboardType: TextInputType.number

Vérifiez mon fichier 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
          ),
        ],
      )),
    );
  }
}

enter image description here

6 votes

Brillant, merci ! J'aimerais vraiment que la documentation sur les constructeurs de Flutter ne soit pas si mal formatée. J'ai complètement raté celui-là.

16 votes

Mais je peux coller les textes (caractères) dans ce champ. Avez-vous d'autres options ? @Rissmon Suresh

12 votes

N'oubliez pas => import 'package:flutter/services.dart' ;

193voto

Bilal Şimşek Points 163

Pour ceux qui cherchent à faire TextField ou TextFormField n'accepte que des nombres en entrée, essayez ce bloc de code :

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

6 votes

Ceci est bienvenu pour éviter que l'utilisateur colle des chaînes de caractères non numériques (inputFormatters), merci.

4 votes

Cela fonctionne bien même dans Flutter_web. La raison étant que dans Flutter_web, nous ne pouvons pas imposer un clavier numérique, la restriction est donc l'option naturelle. Merci @BilalSimsek

2 votes

C'est la solution parfaite !

78voto

Hardik Kumbhani Points 595

Grâce à cette option, vous pouvez restreindre strictement une autre carte sans numéro.

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

Pour utiliser l'option ci-dessus, vous devez importer cette

import 'package:flutter/services.dart';

en utilisant ce type d'option, l'utilisateur ne peut pas coller un caractère dans un champ de texte.

0 votes

C'est la réponse complète actuelle. sans les formateurs, le simple réglage du clavier ne suffit pas.

3 votes

Si je veux seulement des décimales et des chiffres, comment ajouter le "." dans la liste blanche du formateur ?

0 votes

@shababhsiddique avez-vous trouvé la réponse ?

34voto

Günter Zöchbauer Points 21340

Définir le clavier et un validateur

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

0 votes

J'ai eu une erreur : La variable locale num ne peut pas être référencée avant d'être déclarée.

0 votes

Ok, le nom num pour la variable ne fonctionne pas. Le nom doit être modifié

1 votes

De la part des docteurs : Le paramètre onError est déprécié et sera supprimé. Au lieu de num.parse(string, (string) { ... }), vous devriez utiliser num.tryParse(string) ? ?? (...).

18voto

Fellipe Sanches Points 555

Pour ceux qui doivent travailler avec format de paiement dans les champs de texte :

A utiliser uniquement : , (virgule) et . (période)

et bloquer le symbole : - (trait d'union, moins ou tiret)

ainsi que le : ⌴ (espace vide)

Dans votre TextField, il suffit de mettre le code suivant :

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

Les simboles trait d'union et espace apparaîtront toujours dans le clavier, mais seront bloqués.

1 votes

Savez-vous comment autoriser une seule virgule ou un seul point ?

1 votes

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X