微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

setState方法后Flutter TextFieldInput值未更新

如何解决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 ?? "",),
,
  1. 为您的TextEditingController创建一个TextField
  // create a controller for the TextField
  TextEditingController controller = TextEditingController();
  1. controller分配给您的TextField
     TextFormField(
          initialValue: otp ?? "",// assign the controller to the TextField
          controller: controller,// new line
        ),SizedBox(height: getProportionateScreenHeight(20.0)),Text(otp ?? ""),
  1. 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 举报,一经查实,本站将立刻删除。