Flutter TextField TextInputFormatter 在输入不允许的字符时擦除整个字符串

Mic*_*dek 3 regex validation dart flutter

所以我有普通的 TextField,如下所示:

\n
                TextField(\n                          autofocus: true,\n                          controller: _textController,\n                          keyboardType: TextInputType.text,\n                          inputFormatters: <TextInputFormatter>[\n                            FilteringTextInputFormatter.allow(RegExp(\n                                r'^[A-z\xc3\x80-\xc3\x96\xc3\x98-\xc3\xb6\xc3\xb8-\xc4\xaf\xc4\xb4-\xc5\x91\xc5\x94-\xc5\xbe\xc7\x8d-\xc7\xb0\xc7\xb4-\xc7\xb5\xc7\xb8-\xc8\x9b\xc8\x9e-\xc8\x9f\xc8\xa4-\xc8\xb3\xc9\x83\xc9\x86-\xc9\x8f\xe1\xb8\x80-\xe1\xba\x9e\xc6\x80-\xc6\x93\xc6\x97-\xc6\x9a\xc6\x9d-\xc6\xa1\xc6\xa4-\xc6\xa5\xc6\xab-\xc6\xb0\xc6\xb2-\xc6\xb6\xe1\xba\xa0-\xe1\xbb\xbf\\s*&^%0-9,.-:)(]+$')),\n                          ],\n                          style: TextStyle(\n                            color: Colors.amber,\n                          ),\n                          decoration:\n                              InputDecoration(fillColor: Colors.transparent),\n                          maxLines: null,\n                        ),\n
Run Code Online (Sandbox Code Playgroud)\n

一切正常,直到我写入不允许进入该字段的字符,然后整个字符串消失。我深入研究它并发现它FilteringTextInputFormatter.allow有一个被调用的属性replacementString,默认情况下为空字符串。现在的问题是,我到底应该如何处理这个问题,因为如果我向文本控制器添加侦听器并监视更改,我不知道用户是否删除了文本或用户是否输入了不允许的字符。据我所知。

\n

有没有某种方法可以阻止使用正则表达式输入字符,我不想删除文本,我只是想阻止输入不允许的字符。有没有某种方法可以在没有侦听器或其他进行此类检查的方法的情况下实现此目的?

\n

Mic*_*dek 17

所以这个问题的解决方案很简单,正则表达式末尾不应该有 $ 符号,我回答这个问题只是为了防止有人发现这很有用。

\n

而不是这个:

\n
FilteringTextInputFormatter.allow(RegExp(\n                                r'^[A-z\xc3\x80\\s*&^%0-9,.-:)(]+$'))\n
Run Code Online (Sandbox Code Playgroud)\n

为了实现正确的功能,它需要像这样:

\n
FilteringTextInputFormatter.allow(RegExp(\n                                r'^[A-z\xc3\x80\\s*&^%0-9,.-:)(]+'))\n
Run Code Online (Sandbox Code Playgroud)\n