Flutter Firebase快照为空时始终返回1个文档

时间:2020-03-12 12:26:40

标签: firebase flutter google-cloud-firestore

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)不是空

但是,如果我重新运行该应用程序,则它可以正常工作,并且将为空。

有人可以帮忙发生什么事吗?

解决方案

https://github.com/FirebaseExtended/flutterfire/issues/2161

2 个答案:

答案 0 :(得分:0)

嗯,这只是一个理论,因为我们没有完整的代码和数据库结构,但是根据这种doc方法,documentChanges应该返回DocumentChange对象的列表。

所以,我认为在删除最后一个文档时返回1个结果并不奇怪。这似乎是正确的行为,因为在DocumentChange类的remove类的property中,您也有DocumentChange

对我来说,更奇怪的是,仅删除文档时,您将获得更多结果。在这种情况下,应该只删除了一个。

如果您查看oldIndex reference,则发现newIndexDocumentChange属性可能已被更改...

如果我愿意做的话,我会记录所有{{1}}属性,并分析造成这种行为的原因。

我希望它将对您有帮助!

答案 1 :(得分:0)

我发现这是一个基本的Firestore Flutter BUG,所以我现在关闭此问题。