通过另一个TextFormField更改TextFormField的值

时间:2019-07-22 05:26:56

标签: flutter

当用户输入第一个TextFormField时,我试图更改第二个TextFormField的值。

TextEditingController txt1  = TextEditingController();
TextEditingController txt2  = TextEditingController();

  new Container(
    child: new TextFormField(
      controller: txt1,
      autovalidate: true,
      keyboardType: TextInputType.number,
      validator: (value){
        if(value.isEmpty){
          txt2.text = "0";
          return 'Please enter value';
        }else{
          txt2.text = ((10/100)*value).toString();
        }
      },
    )
  ),
  new Container(
    child: new TextFormField(
      controller: txt2,
      enabled: false
    )
  ),

它正常工作。但是在运行控制台中,我看到以下错误消息

  

“在构建过程中调用了setState()或markNeedsBuild()”

1 个答案:

答案 0 :(得分:1)

建议的方法是使用listener-但是代码中的另一种简短方法是使用future。

您所拥有的工作代码:

child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          new Expanded(
              child: new TextFormField(
            controller: txt1,
            autovalidate: true,
            keyboardType: TextInputType.number,
            validator: (value) {
              if (value.isEmpty) {
                Future.value(Duration(seconds: 1)).whenComplete(() {   // Add this
                  txt2.text = "0";
                });
                return 'Please enter value';
              } else {
                Future.value(Duration(seconds: 1)).whenComplete(() {  //Add this
                  txt2.text = ((10 / 100) * int.parse(value)).toString();
                });
                return null;
              }
            },
          )),
          Expanded(child: TextFormField(controller: txt2, enabled: false)),
        ],
      ),