如何解决当子集合在另一个窗口小部件中接收数据时,重建窗口小部件
我有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 举报,一经查实,本站将立刻删除。