当用户输入第一个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()”
答案 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)),
],
),