Flutter setState()在更新UI方面有任何限制吗

Flutter setState()在更新UI方面有任何限制吗,flutter,setstate,Flutter,Setstate,我正在尝试更新TextField以显示错误文本,直到外部validators软件包验证电子邮件。但是,即使我在build方法中调用setState,UI也不会更新。我尝试使用print语句(附屏幕截图)进行调试,其行为符合预期。那么,如果我试图在setState()中传入更新的TextFieldUI,为什么UI不更新并在下面显示错误文本的TextField 有效的代码 child: TextField( dec

我正在尝试更新
TextField
以显示错误文本,直到外部
validators
软件包验证电子邮件。但是,即使我在build方法中调用
setState
,UI也不会更新。我尝试使用
print
语句(附屏幕截图)进行调试,其行为符合预期。那么,如果我试图在
setState()
中传入更新的
TextField
UI,为什么UI不更新并在下面显示错误文本的TextField

有效的代码

                    child:  TextField(
                      decoration: InputDecoration(
                          hintText: "Enter Email Id",
                          border: OutlineInputBorder()),
                      onChanged: (String value) {
                        emailId = value;
                        setState(() {
                          isEmail(value)
                              ? print("true")
                              : TextField(
                                  decoration: InputDecoration(
                                      errorText: "Enter valid email"),
                                );
                        });
                      },

不起作用的代码

                    child:  TextField(
                      decoration: InputDecoration(
                          hintText: "Enter Email Id",
                          border: OutlineInputBorder()),
                      onChanged: (String value) {
                        emailId = value;
                        setState(() {
                          isEmail(value)
                              ? print("true")
                              : TextField(
                                  decoration: InputDecoration(
                                      errorText: "Enter valid email"),
                                );
                        });
                      },

您的代码无法工作,因为您没有更改父窗口小部件的状态 在其
onChanged:
属性中。您正在设置状态时创建一个新的小部件

child: TextField( //parent
      decoration: InputDecoration(
      hintText: "Enter Email Id",
      border: OutlineInputBorder()),
              onChanged: (String value) {
              emailId = value;
              setState(() {
                 isEmail(value)
                    ? print("true")
                    : TextField( //this is not the same widget.
                        decoration: InputDecoration(
                         errorText: "Enter valid email"),
                     );
                    });
                  },
您可以通过声明
String invalidEmailError
并将其设置为
TextField
errorText
属性来解决此问题。稍后更新此字符串以获得所需的结果

TextField(
      decoration: InputDecoration(
      hintText: "Enter Email Id",
          errorText: invalidEmailError,
          border: OutlineInputBorder()),
          onChanged: (String value) {
          emailId = value;
        setState(() {
            isEmail(value)
                ? invalidEmailError = null
                : invalidEmailError = "Enter valid email";
        });
      },
      )

不要发布代码/日志的屏幕截图。以文本形式发布并使用文本工具箱格式化itI我使用屏幕截图显示输出日志。