Як створити поле введення числа в Flutter?


126

Я не можу знайти спосіб створення поля введення у Flutter, який відкрив би числову клавіатуру. Чи можливо це за допомогою віджетів Flutter material? Деякі дискусії з github, схоже, вказують, що це підтримується функція, але я не можу знайти жодної документації про це.


додати тип клавіатури: тип клавіатури: TextInputType.number,
Ішан Фернандо

Відповіді:


250

Ви можете вказати номер як typeType для 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,
            inputFormatters: <TextInputFormatter>[
    WhitelistingTextInputFormatter.digitsOnly
], // Only numbers can be entered
          ),
        ],
      )),
    );
  }
}

введіть тут опис зображення


3
Блискуче, дякую! Мені дуже хочеться, щоб документація на конструктор Flutter не була так сильно відформатована Повністю пропустив цей.
Janne Annala

8
Але я можу вставити тексти (символи) на це поле. Чи є у вас інші варіанти? @Rissmon Suresh
Thirumal

5
не забудь = = імпортувати 'пакет: flutter / services.dart';
Вільмер

Дозволяє ставити крапки, пробіли та вставляти смайли
agilob

5
inputFormatters: Тут також потрібен [WhitelistingTextInputFormatter.digitsOnly], оскільки кома та крапка все ще можуть бути прийняті тут у відповіді.
Раві Ядав

79

Для тих, хто шукає введення 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)
    )
)

3
Це вітається, щоб уникнути того, щоб користувач вставляв нецифрові рядки (inputFormatters), дякую.
Mariano Argañaraz

2
Це добре працює навіть у Flutter_web. Причина, що знаходиться в flutter_web, ми не можемо застосувати числову клавіатуру, тому обмеження є природним варіантом. Дякую @ BilalŞimşek
Абхілаш Чандран

1
Це ідеальне рішення!
Кавінда Джаякоді

31

Завдяки цій опції ви можете суворо обмежити черговий знак, який не має номера.

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

Для використання наведеної вище опції вам потрібно імпортувати це

import 'package:flutter/services.dart';

користуючись таким видом опції, користувач не може вставити char у текстове поле


це фактична вичерпна відповідь. без форматорів недостатньо лише встановлення клавіатури.
shababhsiddique

якщо я хочу лише десятковий і цифр. як додати "." у білий список форматера?
shababhsiddique

19

Встановіть клавіатуру та валідатор

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

Отримана помилка: до локальної змінної число не можна посилатися до її оголошення
kashlo

Гаразд, назва numзмінної не працює. Назву потрібно змінити
Günter Zöchbauer

1
З документів: Параметр onError застарілий і буде видалений. Замість num.parse (string, (string) {...}) слід використовувати num.tryParse (string) ?? (...).
кашло

13

Для тих, кому потрібно працювати з форматом грошей у текстових полях:

Використовувати лише:, (кома) та. (період)

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

а також: ⌴ (порожнє місце)

У текстовому полі просто встановіть наступний код:

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

Дефіс символів та пробіл все ще з’являться на клавіатурі, але стануть заблокованими.


Чи знаєте ви, як дозволити лише одну кому чи період?
Хедді Франко



2

Ви можете легко змінити тип вводу за допомогою параметра " Тип клавіатури", і у вас є багато можливостей перевірити документацію TextInputType, щоб ви могли використовувати номер або значення телефону

 new TextField(keyboardType: TextInputType.number)

2

Ви можете спробувати це:

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

1

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

1

Ось код для фактичної клавіатури телефону на Android:

Ключова частина: 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

Ось код для цифрової клавіатури: keyboardType: TextInputType.phone Коли ви додасте цей код у текстове поле, він відкриє цифрову клавіатуру.

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

Ласкаво просимо до переповнення стека! Будь ласка, включіть хоча б деякий контекст того, як це працює з кодом.
zixuan

0

Для введення чисел або цифрової клавіатури можна використовувати клавіатуруType: TextInputType.number

TextFormField(
  decoration: InputDecoration(labelText:'Amount'),
    controller: TextEditingController(
  ),
  validator: (value) {
    if (value.isEmpty) {
      return 'Enter Amount';
    }
  },
  keyboardType: TextInputType.number
)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.