我有一个要从另一个窗口小部件按编程方式更新的表单。为了测试这一点,我使用相同的文本对标签文本进行了更新,并且按预期工作。
出于某种原因,即使在调试中初始值确实显示字符串为正确值,也不会更新。我添加了一个控制器来处理文本,但我仍然不明白为什么初始值不能按我预期的方式工作。
new TextFormField(
key: _orderAddEditOrderFormKey,
decoration: InputDecoration(
labelText: order.order == null ? 'Order' : order.order),
initialValue: order.order == null ? "" : order.order,
),
setState(() {
isBuildOrderUsed = true;
if (this.order == null) {
this.order = new Order(order: order);
} else {
this.order.order = order;
}
});
答案 0 :(得分:1)
这是因为initialValue
是在initState
中设置为TextEditingController
的,所以您不能更新该值,它只是“初始值”。
检查TextFormField
的源代码:
@override
void initState() {
super.initState();
if (widget.controller == null) {
_controller = new TextEditingController(text: widget.initialValue);
} else {
widget.controller.addListener(_handleControllerChanged);
}
}
答案 1 :(得分:0)
更改TextFormField初始文本的唯一方法是像这样使用TextEditingController():
final _textEditingController = TextEditingController();
_textEditingController.addListener(_textEditingControllerListener);
void _textEditingControllerListener() {
_textEditingController.text = newValue;
}