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我使用屏幕截图显示输出日志。