当子集合在另一个窗口小部件中接收数据时,重建窗口小部件

问题描述

我有6个小部件,它们全部共享相同的数据,只有一个小部件从流中接收数据

AllClasses()//显示所有类,并且是从流中获取数据的开始

ClassList(data)//不显示任何内容,但构建列表视图并保存将在分类窗口小部件中显示的类别的索引

Classtile(data)//表示从ClassList传入的数据的索引中的数据

Classpage(data)//单击分类窗口时,将显示此屏幕

HomeworksList(data)//单击“家庭作业”按钮时转到此小部件,显示可用于单击的特定类的所有家庭作业

HomeworkTile(data)//显示每个作业的图块

如您所见,我获取数据一次,然后将其多次传递到小部件树中。变成一个问题是,当我显示作业列表时,它是来自数据来源的小部件树下方的5个小部件,我可以选择向作业列表中添加一个作业。从技术上讲,将其添加到Firestore数据库中。

问题在于,当我添加作业时,它直到刷新到“ AllClasses()”小部件之前都不会刷新数据或重建任何小部件。

重申一下,我有一个小部件可以显示所有作业,并且在此小部件中您可以添加作业,并且在执行该操作时,它会更新子集合,但不会重建显示所有作业的小部件,直到我回过头来第一次抓取数据的几个小部件

数据库模式设置如下:

Classes {
  subcollections:
    Homework {
      ...

    }


  fields:




}

也许是我拥有数据库的方式,相反,我应该拥有一切之外的Homeworks集合。也许是因为我正在使用生成器Future通过使用永不结束的while循环来生成与流相同的事物。无论哪种方式,我对流的理解不足以理解下一步该怎么做,从今天上午8点开始,我就一直在进行这项工作,并且我已经尽力尝试了几乎所有事情。我可能只是将Homeworks用作一个单独的集合而不是一个子集合,问题是我单击作业时知道我所在的班级。

Stream<List<ClassData>> get fetchClassdata async* {
    QuerySnapshot snapshot = await classesCollection.getDocuments();

    // while (true) {
    List<ClassData> _classList = List<ClassData>();

    await Future.forEach(snapshot.documents,(element) async {
      QuerySnapshot pre = await Firestore.instance
          .collection("Classes")
          .document(element.documentID)
          .collection("Pre")
          .getDocuments();
      QuerySnapshot homeworksSnapshot = await Firestore.instance
          .collection("Classes")
          .document(element.documentID)
          .collection("Homework")
          .getDocuments();

      QuerySnapshot notesSnapshot = await Firestore.instance
          .collection("Classes")
          .document(element.documentID)
          .collection("Notes")
          .getDocuments();

      QuerySnapshot testsSnapshot = await Firestore.instance
          .collection("Classes")
          .document(element.documentID)
          .collection("Tests")
          .getDocuments();

      List<Preq> _preList = List<Preq>();
      List<Homework> _homeworkList = List<Homework>();
      List<Note> _notesList = List<Note>();
      List<Test> _testsList = List<Test>();

      pre.documents.forEach((preClass) {
        Preq preqData = Preq.fromMap(preClass.data);

        if (preClass.data != null) {
          _preList.add(preqData);
        }
      });

      homeworksSnapshot.documents.forEach((hwork) {
        Homework homeworkdata = Homework.fromMap(hwork.data);

        _homeworkList.add(homeworkdata);
      });

      

      ClassData data = ClassData.fromMap(
          element.data,element.documentID,_preList,_homeworkList);

      if (data != null) {
        _classList.add(data);
      }
    });

    yield _classList;
    // }
  }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)