Flutter Itembuilder没有';更新firestore中的数据时,不要在streambuilder中执行

Flutter Itembuilder没有';更新firestore中的数据时,不要在streambuilder中执行,flutter,stream-builder,flutter-animatedlist,Flutter,Stream Builder,Flutter Animatedlist,当我第一次启动应用程序时,它会将所有项目加载到动画列表中。但当我向firestore添加一个项目时,streambuilder会意识到发生了什么。但它不会执行itembuilder,因此不会显示新项目。但是,如果我重新启动应用程序,将加载新项目。如果我只是更改firestore数据库中现有项目的名称,它将毫无问题地重建 当我更新一个项目时。我必须获取任务地图,并将其替换为包含该项目的新副本,然后将其发布/更新到firestore 我已经尝试了我能想到的一切,不明白为什么会发生这种情况。 我已经在

当我第一次启动应用程序时,它会将所有项目加载到动画列表中。但当我向firestore添加一个项目时,streambuilder会意识到发生了什么。但它不会执行itembuilder,因此不会显示新项目。但是,如果我重新启动应用程序,将加载新项目。如果我只是更改firestore数据库中现有项目的名称,它将毫无问题地重建

当我更新一个项目时。我必须获取任务地图,并将其替换为包含该项目的新副本,然后将其发布/更新到firestore

我已经尝试了我能想到的一切,不明白为什么会发生这种情况。 我已经在itembuilder中打印,可以看到它不会在更新时执行

Widget _buildTasksList() {

    return new Expanded(
      child: new StreamBuilder(
      stream: Firestore.instance
          .collection("lists")
          .document(tasklist.postID)
          .snapshots(),
      builder: (BuildContext context, AsyncSnapshot snapshot) {
        if (!snapshot.hasData) {
          return new Text("Loading");
        }
        var listdata = snapshot.data;
        tasklist.tasks = listdata['tasks'];
        tasklist.owners = listdata['owners'];
        tasklist.sorter = listdata['sorter'];
        return new AnimatedList(
          initialItemCount: convertToTaskList(listdata['tasks']).length,
          key: _listKey,
          itemBuilder: (context, index, animation) {
            return new TaskRow(
              task: this.listModel[index],
              animation: animation,
              listModel: this.listModel,
              tasklist: tasklist,
              onChange: () => _onChange(this.listModel[index]),
            );
          },
        );
      },
    )
    );
  }

通过重置我的_listKey使其工作,在动画列表之前添加了此项。 _listKey=null;
_listKey=new GlobalKey()

通过重置我的_listKey使其工作,在动画列表之前添加了此项。 _listKey=null; _listKey=new GlobalKey()