setState 阻止编辑 TextEditingController

问题描述

我在 TextFormField 中使用 TextFormField 作为小部件和 TextEditingController 作为电话号码,我试图在使用 Flutter_libphonenumber 库键入时验证数字,该库提供了一个用于验证的异步函数。 我正在尝试根据输入时的验证状态更改文本的颜色。

当前状态:

  1. 实现了 TextFormField 并将其 TextEditingController 作为具有有效初始文本的控制器提供。
  2. 已实现 onFieldSubmitted,点击键盘的“完成”按钮即可正常工作。
  3. listener 添加到此控制器以进行验证并在那里设置 _isValid bool。
  4. 我在构建控制器时使用了这个布尔值来设置控制器内文本的颜色。
  5. 所以当前的问题是,当我输入文本时,我在侦听器中获得了正确的验证状态,但文本的颜色没有相应地改变。

我知道这是因为验证后没有调用 setState,所以它会重建小部件并根据 _isValid 更改颜色。

错误当我在 setState 中尝试 listener 时,它只是不允许编辑。

注意:我已经使用 onChanged 方法尝试了相同的方法,它也有相同的效果,如果有预先填充的文本({{1} }).

谁能帮我解决这个问题,或者指导正确的路径?

谢谢!

解决方法

您可以通过执行以下操作来使用表单小部件的自动验证字段

Form(
 autovalidate: true