TextFormField 未重置其初始值
TextFormField not resetting its Initial Value
我对 Flutter
有点陌生,所以我不知道这是否是更新从服务器收集的数据的 "correct" 方式。就我而言,我正在做的是(我的应用程序代码很长,我认为下面的描述就足够了):
- 让用户为给定日期创建自定义表单。
- 让他将数据上传到服务器(更具体地说,
Firebase
)。
- 如果他点击某个日期,表格应该更新为
Firebase
上保存的最新表格。
- 为此,我删除了所有
TextFormField
小部件(它们保存在 Map
中,我用 widgetsMap = {}
重置了它,这也是我所做的表单数据本身)并使用从 Firebase
. 检索到的数据重建它们
TextFormField
应该有一个基于从 Firebase
检索到的初始值。为此,我尝试使用 controller
和 initialValue
,但均无效。
- 问题是,如果我想第二次更新一个字段的初始值,前一个会保留。例如,如果
date 1
的初始值为 Hello
,而 date 2
的初始值为 World
;当我点击来自 date 1
的 date 2
时,虽然 TextFormField
小部件(甚至可能有不同数量的小部件)将被正确构建,但显示的初始值仍将是 Hello
.
所以发生了什么事?一旦重置了小部件和数据,不应该清除小部件的 initialValue
吗?即使在我用 = {}
重置它们之后,这些对象是否仍然存在于后台某处(我认为,因为 dart
是一种垃圾收集语言,一旦对它们的引用消失,这些对象就会被删除...)?
将 Key
添加到 TextFormField
。您可以使用 Key(initialValue)
。例如:
TextFormField(
key: Key(widget.initialValue),
initialValue: widget.initialValue),
...
)
虽然您重置了自己的 TextFormField
s 映射,但如果您将新的 TextFormField
s 放在小部件树中的相同位置,Flutter
框架将重用以前的状态。设置 Key
将告诉 Flutter
这是一个不同的小部件。
我对 Flutter
有点陌生,所以我不知道这是否是更新从服务器收集的数据的 "correct" 方式。就我而言,我正在做的是(我的应用程序代码很长,我认为下面的描述就足够了):
- 让用户为给定日期创建自定义表单。
- 让他将数据上传到服务器(更具体地说,
Firebase
)。 - 如果他点击某个日期,表格应该更新为
Firebase
上保存的最新表格。- 为此,我删除了所有
TextFormField
小部件(它们保存在Map
中,我用widgetsMap = {}
重置了它,这也是我所做的表单数据本身)并使用从Firebase
. 检索到的数据重建它们
TextFormField
应该有一个基于从Firebase
检索到的初始值。为此,我尝试使用controller
和initialValue
,但均无效。- 问题是,如果我想第二次更新一个字段的初始值,前一个会保留。例如,如果
date 1
的初始值为Hello
,而date 2
的初始值为World
;当我点击来自date 1
的date 2
时,虽然TextFormField
小部件(甚至可能有不同数量的小部件)将被正确构建,但显示的初始值仍将是Hello
.
- 问题是,如果我想第二次更新一个字段的初始值,前一个会保留。例如,如果
- 为此,我删除了所有
所以发生了什么事?一旦重置了小部件和数据,不应该清除小部件的 initialValue
吗?即使在我用 = {}
重置它们之后,这些对象是否仍然存在于后台某处(我认为,因为 dart
是一种垃圾收集语言,一旦对它们的引用消失,这些对象就会被删除...)?
将 Key
添加到 TextFormField
。您可以使用 Key(initialValue)
。例如:
TextFormField(
key: Key(widget.initialValue),
initialValue: widget.initialValue),
...
)
虽然您重置了自己的 TextFormField
s 映射,但如果您将新的 TextFormField
s 放在小部件树中的相同位置,Flutter
框架将重用以前的状态。设置 Key
将告诉 Flutter
这是一个不同的小部件。