TextFormField 不重置其初始值

Phi*_*aro 2 textfield dart firebase flutter

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

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

那么发生了什么?如果不是initialValue的小窗口被消灭,一旦小部件和数据已被重置?即使在我重置它们之后,这些对象是否仍然存在于背景中= {}(我认为,由于dart是一种垃圾收集语言,一旦对它们的引用消失,这些对象将被删除......)?

Fil*_* P. 7

添加KeyTextFormField. 您可以使用Key(initialValue). 例如:

TextFormField(
  key: Key(widget.initialValue),
  initialValue: widget.initialValue),
  ...
)
Run Code Online (Sandbox Code Playgroud)

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

  • 这不应该是“TextFormField”的一个错误吗?我认为“Flutter”小部件应该在“build”方法中“完全”重建,并且“不”对以前的小部件有任何引用。 (2认同)