setState() 在更新方面是否有任何限制 UI
Does setState() have any limitations with regard to updating UI
我正在尝试更新 TextField
以显示错误文本,直到电子邮件被外部 validators
包验证。但是,即使我从构建方法中调用 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"),
);
});
},
您的代码不起作用,因为您没有更改父窗口小部件的状态
在它的 onChanged:
属性 里面。您正在 set state
上创建一个新的小部件
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";
});
},
)
我正在尝试更新 TextField
以显示错误文本,直到电子邮件被外部 validators
包验证。但是,即使我从构建方法中调用 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"),
);
});
},
您的代码不起作用,因为您没有更改父窗口小部件的状态
在它的 onChanged:
属性 里面。您正在 set state
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";
});
},
)