我有一个关于颤振生命周期的问题。
自从昨天我从1.7抖动更新到1.9以来,发生了一些奇怪的事情。我运作良好的表格开始表现得很奇怪。
我有一个有状态的小部件,如果没有对象,则在其构造函数中实例化一个新的小部件,以便用户可以添加新对象或使用此小部件编辑现有对象。像这样的东西:
final MyObject object;
MyForm() : this.object = MyObject(name: "", origin: Origin.EARTH);
MyForm.edit(this.object);
名称是一个简单的字符串,起源是一个枚举。
在表单状态下,我有一个全局密钥:final _formKey = GlobalKey<FormState>();
稍后在代码中,我有一个字段名称,以及一个带有不同原点值的下拉列表。
TextFormField(
initialValue: widget.object.name,
onSaved: (value) {widget.object.name = value;),
),
DropdownButtonFormField(
decoration: InputDecoration(labelText: "Origin"),
items: _originList,
value: widget._object.origin,
onChanged: (value) {
setState(() {
widget._object.origin = value;
});
},
onSaved: (value) {
widget._object.type = value;
},
),
例如,当我将下拉菜单值更改为mars时,它确实在对象中选择了mars,并且在下拉菜单中显示了mars。 (由调试器确认)
然后,当我单击名称文本字段以更改对象的名称时,下拉列表又回到了地面。
现在,真正奇怪的是,如果我保存我的对象...它将正确保存它! (带有火星和我选择的名字)
我发现,由于某种原因(我不理解),当我单击表单的其他字段时会调用表单的构造函数(不是表单状态,而是表单),这会回想起我的构造函数MyForm( ),它会设置一个新的MyObject,其值为earth ...
但是为什么它正确地保存它却让我感到困惑...如果与这种行为相一致,应该保存选择了地球而不是火星的对象...
关于这是怎么回事的任何想法? (我也很清楚地表明,在更新Flutter 1.9之前没有发生任何错误,因此这可能是该新版本中的错误...)
如果有帮助,我也正在用iPhone模拟器进行测试。
感谢您的任何反馈!
答案 0 :(得分:0)
如果有人遇到与我相同的问题,则可以在此处阅读如何解决此问题:https://github.com/flutter/flutter/issues/27821
这是临时解决方案,直到flutter团队在其框架上解决此问题为止!
干杯!