如何解决setState方法后Flutter TextFieldInput值未更新
TextFormField(
initialValue: otp ?? "",),SizedBox(height: getProportionateScreenHeight(20.0)),Text(otp ?? ""),
现在我正在从api
给出otp的函数中调用api,而该函数需要显示在TextFieldInput
中,而根本没有显示!但以Text Widget
显示。可能是什么问题。
void processCoupon() async {
try {
if (_terms) {
print("processing mobile number !");
var data = {"mobile": _authModel.mobile};
ApiCall().postData(data,cApi).then((result) {
print(result);
if (result["data"] != null) {
print(result["data"]["otp"]);
setState(() {
otp = result["data"]["otp"].toString();
});
}
});
} else {
print("terms not agreed !");
}
} catch (e) {
print(e);
}
}
解决方法
list1
list2
list3
.
.
.
list30
更改
list2env(df_list,globalenv())
和
df_list
更改
TextFormField(
initialValue: otp ?? "",),
,
- 为您的
TextEditingController
创建一个TextField
:
// create a controller for the TextField
TextEditingController controller = TextEditingController();
- 将
controller
分配给您的TextField
:
TextFormField(
initialValue: otp ?? "",// assign the controller to the TextField
controller: controller,// new line
),SizedBox(height: getProportionateScreenHeight(20.0)),Text(otp ?? ""),
- 将
otp
字符串分配给Text
的{{1}}属性:
controller
,
在您应该使用TextController更新之后,我假定InitialValue仅在第一个结构中使用。
声明:
var otpController = TextEditingController();
将控制器添加到您的TextFormField:
controller: otpController,
更新文本:
setState(() {
otpController.text = result["data"]["otp"].toString();
});
,
我知道可以为此目的使用TextController
的方式,但是问题是表单相当冗长,这就是我们不能使用此方法的地方,因为需要使用对象。问题是它们inital value can be passed
,但是当我们尝试更新该值时,为了反映该值,我们还需要更新密钥,以便inputfield
也将更新。我刚刚添加了以下值,瞧!现在一切正常。
TextFormField(
key: Key(otp),<--- this line was added
initialValue: otp ?? "",
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。