gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 07:19:21 24 4
gpt4 key购买 nike

我正在尝试更新 TextField 以显示错误文本,直到电子邮件被外部 validators 包验证为止。但是,即使我从构建方法中调用 setState,UI 也不会更新。我尝试使用 print 语句(附上屏幕截图)进行调试,结果符合预期。如果我尝试在 setState() 中传递更新的 TextField 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"),
);
});
},

最佳答案

您的代码不起作用,因为您没有更改父小部件的状态在其 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 并在 TextFielderrorText 属性上设置它来解决这个问题。稍后更新此字符串以获得所需的结果。

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

关于flutter - setState() 在更新 UI 方面是否有任何限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56371730/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com