Jak utworzyć pole wprowadzania liczb w Flutterze?

128

Nie mogę znaleźć sposobu na utworzenie pola wejściowego we Flutterze, które otworzyłoby klawiaturę numeryczną. Czy jest to możliwe dzięki widżetom materiałów Flutter? Niektóre dyskusje na githubie wydają się wskazywać, że jest to obsługiwana funkcja, ale nie mogę znaleźć żadnej dokumentacji na jej temat.

Janne Annala
źródło
dodaj typ klawiatury keyboardType: TextInputType.number,
Ishan Fernando

Odpowiedzi:

252

Możesz określić liczbę jako typ_klawiatury dla pola tekstowego, używając:

keyboardType: TextInputType.number

Sprawdź mój plik 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
          ),
        ],
      )),
    );
  }
}

wprowadź opis obrazu tutaj

Rissmon Suresh
źródło
3
Świetnie, dzięki! Naprawdę chciałbym, żeby dokumentacja konstruktora Fluttera nie była tak źle sformatowana. Całkowicie przegapiłem ten.
Janne Annala
8
Ale mogę wkleić teksty (znaki) w tym polu. Czy masz inne opcje? @Rissmon Suresh
Thirumal Govindaraj
5
nie zapomnij => importuj 'pakiet: flutter / services.dart';
Wilmer
Pozwala wstawiać kropki, spacje i wklejać emoji
agilob
5
inputFormatters: [WhitelistingTextInputFormatter.digitsOnly] jest również wymagane w tym miejscu, ponieważ przecinek i kropka mogą być nadal akceptowane tutaj w odpowiedzi.
Ravi Yadav
80

Dla tych, którzy chcą tworzyć TextFieldlub TextFormFieldakceptować tylko liczby jako dane wejściowe, wypróbuj ten blok kodu:

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)
    )
)
Bilal Şimşek
źródło
3
Jest to mile widziane, aby użytkownik nie wklejał ciągów innych niż cyfry (inputFormatters), dzięki.
Mariano Argañaraz
2
Działa to dobrze nawet w Flutter_web. Ponieważ w flutter_web nie możemy wymusić klawiatury numerycznej, ograniczenie jest naturalną opcją. Dzięki @ BilalŞimşek
Abhilash Chandran
1
To idealne rozwiązanie!
Kavinda Jayakody
31

Dzięki tej opcji możesz ściśle ograniczyć możliwość innego znaku bez numeru.

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

Aby skorzystać z powyższej opcji, musisz to zaimportować

import 'package:flutter/services.dart';

używając tego rodzaju opcji użytkownik nie może wkleić znaku w pole tekstowe

Hardik Kumbhani
źródło
to jest prawdziwa wyczerpująca odpowiedź. bez elementów formatujących samo ustawienie klawiatury nie wystarczy.
shababhsiddique
jeśli chcę tylko dziesiętne i cyfry. jak dodać znak „.” do białej listy programu formatującego?
shababhsiddique
19

Ustaw klawiaturę i walidator

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
    ...
Günter Zöchbauer
źródło
Wystąpił błąd: nie można odwołać się do zmiennej lokalnej num przed jej zadeklarowaniem
kashlo,
Ok, nazwa numzmiennej nie działa. Nazwa musi zostać zmieniona
Günter Zöchbauer
1
Z dokumentów: parametr onError jest przestarzały i zostanie usunięty. Zamiast num.parse (string, (string) {...}), powinieneś użyć num.tryParse (string) ?? (...).
kashlo,
13

Dla tych, którzy muszą pracować z formatem pieniędzy w polach tekstowych:

Używać tylko :, (przecinek) i. (Kropka)

i zablokuj symbol: - (łącznik, minus lub myślnik)

a także: ⌴ (spacja)

W swoim TextField po prostu ustaw następujący kod:

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

Łącznik symboli i spacja nadal będą pojawiać się na klawiaturze, ale zostaną zablokowane.

Fellipe Sanches
źródło
Czy wiesz, jak dopuścić tylko jeden przecinek lub kropkę?
Heddie Franco
1
@HeddieFranco przeczytaj o wyrażeniu regularnym developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/ ...
Fellipe Sanches,
2

Możesz łatwo zmienić typ wejścia za pomocą parametru keyboardType i masz wiele możliwości sprawdź dokumentację TextInputType, aby móc użyć numeru lub wartości telefonu

 new TextField(keyboardType: TextInputType.number)
Raouf Rahiche
źródło
2

Możesz spróbować tego:

TextFormField(
     keyboardType: TextInputType.number,
     decoration: InputDecoration(
              prefixIcon: Text("Enter your number: ")
     ),
     initialValue: "5",
     onSaved: (input) => _value = num.tryParse(input),
),
Hasan A Yousef
źródło
1

keyboardType: TextInputType.number otworzyłby klawiaturę numeryczną pod fokusem, wyczyściłbym pole tekstowe, gdy użytkownik wpisze / przejdzie cokolwiek innego.

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;
}
Lahar Shah
źródło
1

Oto kod dla rzeczywistej klawiatury telefonu na Androida:

Kluczowa część: 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;
    },
  ),
Andrey
źródło
0

Oto kod dla klawiatury numerycznej: keyboardType: TextInputType.phone Po dodaniu tego kodu w polu tekstowym otworzy się klawiatura numeryczna.

  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,
           ),
          );
Paras Sharma
źródło
Witamy w Stack Overflow! Proszę podać przynajmniej trochę kontekstu, jak to działa z kodem.
zixuan
0

Do wprowadzania liczb lub klawiatury numerycznej możesz użyć keyboardType: TextInputType.number

TextFormField(
  decoration: InputDecoration(labelText:'Amount'),
    controller: TextEditingController(
  ),
  validator: (value) {
    if (value.isEmpty) {
      return 'Enter Amount';
    }
  },
  keyboardType: TextInputType.number
)
bieżnik khuram
źródło