Как создать поле ввода чисел в Flutter?

Я не могу найти способ создать поле ввода в Flutter, которое откроет цифровую клавиатуру. Возможно ли это с виджетами Flutter? Некоторые обсуждения github, похоже, указывают, что это поддерживаемая функция, но я не могу найти документацию об этом.

Ответы

Ответ 1

Вы можете указать число в качестве клавиатуры типа для TextField, используя:

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

enter image description here

Ответ 2

Установить клавиатуру и валидатор

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

Ответ 3

для тех, кто ищет, чтобы сделать 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))
                )

Ответ 4

Для тех, кому нужно работать с денежным форматом в текстовых полях:

Использовать только:, (запятая) и. (Период)

и заблокируйте символ: - (дефис, минус или тире)

а также: ⌴ (пробел)

В вашем TextField просто установите следующий код:

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

Символ дефиса и пробел по-прежнему будут отображаться на клавиатуре, но будут заблокированы.

Ответ 5

Вы можете легко изменить тип ввода с помощью параметра keyboardType и у вас есть много возможностей проверить документацию TextInputType, чтобы вы могли использовать номер или значение телефона

 new TextField(keyboardType: TextInputType.number)

Ответ 6

Вы можете попробовать это:

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

Ответ 7

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;
}