TextFormField Flutter更改不正确

时间:2018-08-06 20:57:58

标签: dart flutter

我有一个要从另一个窗口小部件按编程方式更新的表单。为了测试这一点,我使用相同的文本对标签文本进行了更新,并且按预期工作。

出于某种原因,即使在调试中初始值确实显示字符串为正确值,也不会更新。我添加了一个控制器来处理文本,但我仍然不明白为什么初始值不能按我预期的方式工作。

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;
            }
          });

2 个答案:

答案 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;
}