TextFormField不会重置其初始值

时间:2019-11-05 16:04:32

标签: firebase flutter dart textfield

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

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

那是怎么回事?重置小部件和数据后,是否应该清除小部件的TextFormField?即使我用Hello重置了这些对象后,这些对象是否仍然存在于背景中(我认为,由于initialValue是一种垃圾收集语言,因此一旦删除了这些对象,这些对象将被删除。 ...)?

1 个答案:

答案 0 :(得分:1)

fitlerUsers()添加到filterUsers(searchTerm) { return this.userList.pipe( map(res => { const result = res.filter(user => { return user.username.toLowerCase().indexOf(searchTerm.toLowerCase()) > -1; }); return result; }) ); } 。您可以使用height = float(input("Enter the height required: ")) 。例如:

Key

尽管您重置了自己的TextFormField映射,但是如果将新的Key(initialValue)放在小部件树中的相同位置,则TextFormField( key: Key(widget.initialValue), initialValue: widget.initialValue), ... ) 框架将重用以前的状态。设置TextFormField会告诉TextFormField这是一个不同的小部件。