如何在Flutter TextField上使用InputFormatter?

时间:2018-05-01 20:58:34

标签: dart flutter

我需要在TextField(inputFormatters:中插入什么内容?

我想在一个TextField中禁止 \ / ,只允许 a Z 在另一个。

4 个答案:

答案 0 :(得分:15)

格式化程序

services library中,您会找到TextInputFormatter 摘要类(这意味着您必须导入package:flutter/services.dart)。

它已经有两个实现,分别是BlacklistingTextInputFormatterWhitelistingTextInputFormatter

如果您想要实现自己的格式化程序,可以通过扩展TextInputFormatter本身并在其中实施formatEditUpdate来实现。

我将展示如何在给定的上下文中应用两个预制格式化程序。

实施例

  

禁止 \ /

为此,我们将使用BlacklistingTextInputFormatter

TextField(inputFormatters: [
            BlacklistingTextInputFormatter(RegExp("[/\\\\]")),
          ])

对于需要提供给格式化程序的Pattern,我将使用RegExp,即正则表达式。您可以找到有关here, which also links you to the features I will be using in my examples的更多信息。

支付关注到四重反斜杠\\\\。这实际上只代表一个反斜杠。原因是在Dart反斜杠是转义键和双反斜杠然后重新表示单个反斜杠,RegExp也是相同的,其中反斜杠也是转义键。

因此,如果我们阻止abF!.,我们也会将其列入{{1}像这样:

[...]

这转换为“黑名单所有'a','b','F','!'和'。'“。

  

只允许 a Z

这次我们使用BlacklistingTextInputFormatter(RegExp("[abF!.]"))

WhitelistingTextInputFormatter

为此,我们指定了两个字符范围:TextField(inputFormatters: [ WhitelistingTextInputFormatter(RegExp("[a-zA-Z]")), ]) a-z,它们也接受指定的两个字符之间的所有字符(此处为所有字母)。这也适用于A-Z,您可以将任何字符附加到该列表,例如0-9还会考虑a-zA-Z0-9!.!

我们可以结合这个

.

这只是为了表明TextField(inputFormatters: [ WhitelistingTextInputFormatter(RegExp("[a-zA-Z]")), BlacklistingTextInputFormatter(RegExp("[abFeG]")), ]) 需要inputFormatters。实际上你应该用一个白名单和一个正则表达式解决这个问题,但这确实有效。

答案 1 :(得分:8)

其他选项:

  • 小写字母:a-z

  • 大写字母:A-Z

  • 带小写字母的元音:á-ú

  • 重音元音:Á-Ú

  • 数字:0-9
  • space :(一个空格)

注意:空格是为了更好地解释

inputFormatters: [
        WhitelistingTextInputFormatter(RegExp("[a-z A-Z á-ú Á-Ú 0-9]"))
      ]

答案 2 :(得分:2)

BlacklistingTextInputFormatterWhitelistingTextInputFormatter@Deprecated 版本1.20.0

现在,您可以使用FilteringTextInputFormatterInputFormatterTextField进行TextFormField

    inputFormatters: [FilteringTextInputFormatter.allow(RegExp(r'^ ?\d*')),]
    inputFormatters: [FilteringTextInputFormatter.deny(' ')]
    inputFormatters: [FilteringTextInputFormatter.digitsOnly]

对于e.x

  TextFormField(
            keyboardType: TextInputType.number,
            inputFormatters: [
              FilteringTextInputFormatter.digitsOnly
            ],
          ),

答案 3 :(得分:-1)

import'package:flutter / services.dart';

在TextFormField中使用这些参数... maxLength:5 keyboardType:TextInputType.number, inputFormatters:[WhitelistingTextInputFormatter.digitsOnly,]