StreamBuilder(
stream: workoutsViewModel.listenMyWorkoutsChange(),
builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasData) {
final workoutList = snapshot.data.documentChanges.map((doc) => WorkoutModel.fromMap(doc.document.data, doc.document.documentID)).toList();
print("-- workouts " + workoutList.length.toString());
workoutList.forEach((c) {
print("---------- changed document " + c.title);
});
我有这段代码,可以收听快照,也可以删除集合中的任何文档。
如果我有4个项目,并删除1,请返回3个项目(document或documentChanged)
如果我有3项并删除1,则返回2项(document或documentChanged)
如果我有2项,并删除1,则返回1项(document或documentChanged)
如果我只有1项,并删除1,则返回1项(相同)(document或documentChanged)不是空
但是,如果我重新运行该应用程序,则它可以正常工作,并且将为空。
有人可以帮忙发生什么事吗?
解决方案
答案 0 :(得分:0)
嗯,这只是一个理论,因为我们没有完整的代码和数据库结构,但是根据这种doc方法,documentChanges
应该返回DocumentChange
对象的列表。
所以,我认为在删除最后一个文档时返回1个结果并不奇怪。这似乎是正确的行为,因为在DocumentChange
类的remove
类的property中,您也有DocumentChange
。
对我来说,更奇怪的是,仅删除文档时,您将获得更多结果。在这种情况下,应该只删除了一个。
如果您查看oldIndex
reference,则发现newIndex
和DocumentChange
属性可能已被更改...
如果我愿意做的话,我会记录所有{{1}}属性,并分析造成这种行为的原因。
我希望它将对您有帮助!
答案 1 :(得分:0)
我发现这是一个基本的Firestore Flutter BUG,所以我现在关闭此问题。