Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flatter firebase快照为空时始终返回1个文档 StreamBuilder( 流:workoutsViewModel.ListenMyWorkoutChange(), 生成器:(上下文,异步快照){ if(snapshot.hasData){ 最终的workoutList=snapshot.data.documentChanges.map((doc)=>WorkoutModel.fromMap(doc.document.data,doc.document.documentID)).toList(); 打印(“--workouts”+workoutList.length.toString()); 工作列表。forEach((c){ 打印(“------------变更文件”+c.标题); });_Firebase_Flutter_Google Cloud Firestore - Fatal编程技术网

Flatter firebase快照为空时始终返回1个文档 StreamBuilder( 流:workoutsViewModel.ListenMyWorkoutChange(), 生成器:(上下文,异步快照){ if(snapshot.hasData){ 最终的workoutList=snapshot.data.documentChanges.map((doc)=>WorkoutModel.fromMap(doc.document.data,doc.document.documentID)).toList(); 打印(“--workouts”+workoutList.length.toString()); 工作列表。forEach((c){ 打印(“------------变更文件”+c.标题); });

Flatter firebase快照为空时始终返回1个文档 StreamBuilder( 流:workoutsViewModel.ListenMyWorkoutChange(), 生成器:(上下文,异步快照){ if(snapshot.hasData){ 最终的workoutList=snapshot.data.documentChanges.map((doc)=>WorkoutModel.fromMap(doc.document.data,doc.document.documentID)).toList(); 打印(“--workouts”+workoutList.length.toString()); 工作列表。forEach((c){ 打印(“------------变更文件”+c.标题); });,firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,我有这个代码,我可以听我的快照,我可以删除收藏中的任何文档 如果我有4项,删除1项,则返回3项(文档或文档更改) 如果我有3项,删除1项,则返回2项(文档或文档更改) 如果我有2项,删除1项,则返回1项(文档或文档更改) 如果我只有1项,并且删除了1项,则返回1项(相同)(文档或文档更改)不为空 但是,如果我重新运行应用程序,它将工作,并且它将是空的 有人能帮忙吗 解决方案 这只是一个理论,因为我们没有完整的代码和数据库结构,但是根据这个方法,documentChanges应该返回一个Doc

我有这个代码,我可以听我的快照,我可以删除收藏中的任何文档

  • 如果我有4项,删除1项,则返回3项(文档或文档更改)

  • 如果我有3项,删除1项,则返回2项(文档或文档更改)

  • 如果我有2项,删除1项,则返回1项(文档或文档更改)

  • 如果我只有1项,并且删除了1项,则返回1项(相同)(文档或文档更改)不为空

但是,如果我重新运行应用程序,它将工作,并且它将是空的

有人能帮忙吗

解决方案


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

因此,在我看来,当最后一个文档被删除时,它返回1个结果并不奇怪。在
DocumentChange
类中,这似乎是正确的行为,您也有
remove

对我来说更奇怪的是,当你只删除文档时,你会得到更多的结果。在这种情况下,应该只有你删除的那一个

如果您查看
DocumentChange
中有
oldIndex
newIndex
属性,它们可能已被更改

如果我站在你的立场,我会记录所有
DocumentChange
属性,并分析这种行为的原因


我希望它会有所帮助!

因此我发现这是一个基本的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);
        });