TextFormField 未重置其初始值

TextFormField not resetting its Initial Value

我对 Flutter 有点陌生,所以我不知道这是否是更新从服务器收集的数据的 "correct" 方式。就我而言,我正在做的是(我的应用程序代码很长,我认为下面的描述就足够了):

  1. 让用户为给定日期创建自定义表单。
  2. 让他将数据上传到服务器(更具体地说,Firebase)。
  3. 如果他点击某个日期,表格应该更新为 Firebase 上保存的最新表格。
    • 为此,我删除了所有 TextFormField 小部件(它们保存在 Map 中,我用 widgetsMap = {} 重置了它,这也是我所做的表单数据本身)并使用从 Firebase.
    • 检索到的数据重建它们
    • TextFormField 应该有一个基于从 Firebase 检索到的初始值。为此,我尝试使用 controllerinitialValue,但均无效。
      • 问题是,如果我想第二次更新一个字段的初始值,前一个会保留。例如,如果 date 1 的初始值为 Hello,而 date 2 的初始值为 World;当我点击来自 date 1date 2 时,虽然 TextFormField 小部件(甚至可能有不同数量的小部件)将被正确构建,但显示的初始值仍将是 Hello.

所以发生了什么事?一旦重置了小部件和数据,不应该清除小部件的 initialValue 吗?即使在我用 = {} 重置它们之后,这些对象是否仍然存在于后台某处(我认为,因为 dart 是一种垃圾收集语言,一旦对它们的引用消失,这些对象就会被删除...)?

Key 添加到 TextFormField。您可以使用 Key(initialValue)。例如:

TextFormField(
  key: Key(widget.initialValue),
  initialValue: widget.initialValue),
  ...
)

虽然您重置了自己的 TextFormFields 映射,但如果您将新的 TextFormFields 放在小部件树中的相同位置,Flutter 框架将重用以前的状态。设置 Key 将告诉 Flutter 这是一个不同的小部件。