【问题标题】:setState blocks editing of TextEditingControllersetState 阻止编辑 TextEditingController
【发布时间】:2021-03-15 11:06:42
【问题描述】:

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

当前状态:

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

我知道这是由于验证后未调用setState 而发生的,因此它将重建小部件并根据 _isValid 更改颜色。

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

注意:我已经尝试过使用onChanged 方法的相同方法,它也一样,如果有预填充的文本(initialText),则无法在 textField 中输入或删除任何内容。

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

谢谢!

【问题讨论】:

    标签: flutter validation onchange setstate texteditingcontroller


    【解决方案1】:

    您可以通过以下方式使用表单小部件的自动验证字段

    Form(
     autovalidate: true
    

    【讨论】:

    • 试过autovalidateMode: AutovalidateMode.onUserInteraction 如果它有任何有效的初始文本,它也不允许编辑。
    猜你喜欢
    • 2019-09-20
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多