setState()在更新UI方面是否有任何限制?

时间:2019-05-30 04:40:44

标签: flutter setstate

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

有效的代码

Code that does work

无效的代码

                    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"),
                                );
                        });
                      },

1 个答案:

答案 0 :(得分:1)

您的代码无效,因为您没有更改父窗口小部件的状态 在其df1 = df.unstack().asfreq('Min', method='ffill').between_time('8:30','16:00').stack() print (df1.head(10)) returns date ticker 2016-11-28 08:30:00 aapl 0.2 amzn 0.2 fb 0.2 ge 0.2 jpm 0.2 msft 0.2 2016-11-28 08:31:00 aapl 0.2 amzn 0.2 fb 0.2 ge 0.2 属性中。您正在按设置状态创建新的小部件

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的{​​{1}}属性来解决此问题。稍后更新此字符串以获得所需的结果。

errorText