【问题标题】:Flutter : Keyboard without decimal pointFlutter:没有小数点的键盘
【发布时间】:2019-12-26 12:40:39
【问题描述】:

我需要一个只有数字(没有小数点)的 numberInputKeyboard。我已经尝试过 keyboardType: TextInputType.numberWithOptions(decimal: false) 但这仍然对我没有帮助

【问题讨论】:

    标签: flutter dart custom-keyboard


    【解决方案1】:

    一个答案建议使用BlacklistingTextInputFormatter,这肯定适用于您的英语语言环境。但是,这可能不适用于使用 , 而不是 . 作为十进制分隔符的其他语言环境。

    所以我建议使用WhitelistingTextInputFormatter

    import "package:flutter/services.dart";
    TextFormField(
      keyboardType: TextInputType.number,
      inputFormatters: [WhitelistingTextInputFormatter.digitsOnly],
    )
    

    这将只允许数字[0-9]

    更新:

    WhitelistingTextInputFormatter 已重命名!以下是最新版本,FilteringTextInputFormatter.allow 不再弃用,并且还提供了数字的快捷方式:

    import "package:flutter/services.dart";
    TextFormField(
      keyboardType: TextInputType.number,
      inputFormatters: [FilteringTextInputFormatter.digitsOnly],
    )
    

    【讨论】:

    • 最简单..让我的工作更轻松..!谢谢兄弟
    • 这比进行自定义验证更简洁。
    【解决方案2】:

    第一种方法:-

    根据这个 stackoverflow 答案,您必须为其创建自定义键盘。

    Android - is it possible to hide certain characters from the soft keyboard?

    第二种方法:-

    您可以使用RegExp 将这些东西列入黑名单,在这种情况下您不能输入点(.)。

    更多内容可以参考:https://api.flutter.dev/flutter/services/TextInputFormatter-class.html

            body: Center(
                child: TextFormField(
                decoration: InputDecoration(
                    labelText: "Title",
                    suffixIcon: GestureDetector(
                    onTap: () {
                        setState(() {
    
                        });
                    },
                    child: Icon(Icons.clear),
                    )),
                inputFormatters: [
                   BlacklistingTextInputFormatter(RegExp("[.]"))
                ],
            )));
    

    【讨论】:

    • 太棒了..!它就像魅力一样。但是你必须在使用之前导入package:flutter/services.dart。谢谢..!!
    【解决方案3】:

    BlacklistingTextInputFormatter 和 WhitelistingTextInputFormatter 已弃用。如果你只想承认数字,你可以使用:

    FilteringTextInputFormatter.digitsOnly
    

    如果你想接受带小数点的数字:

    FilteringTextInputFormatter.allow(RegExp(r'^(\d+)?\.?\d{0,2}')
    

    【讨论】:

      【解决方案4】:

      为了解决这个问题,我做了这个,帮助Amit Prajapati 提供的链接,它是一个但更手动但在我的情况下工作得很好

      inputFormatters: [
                TextInputFormatter.withFunction((oldValue, newValue) {
                  if (textInputType.decimal == true) {
                    return newValue.copyWith(
                      text: newValue.text.replaceAll(RegExp(r"\,"), "."),
                    );
                  }
                  return newValue;
                }),
              ],
      

      编辑:textInputType 是自定义文本字段的变量

      【讨论】:

        猜你喜欢
        • 2013-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-06
        • 1970-01-01
        • 2014-05-29
        • 2018-10-16
        • 1970-01-01
        相关资源
        最近更新 更多