首页 > 解决方案 > Firestore 中的重复数据

问题描述

嗨,我在这里使用此代码从 Firestore 检索数据。数据在 a 中Map,这是我的 Firestore 的图片。

1

2

这是我从 Firestore 检索时的代码

Future <void> getRoute() async{
  Firestore.instance.collection('routes').snapshots().listen((RouteData) {
    if(RouteData.documents.isNotEmpty){
      for (int i = 0; i < RouteData.documents.length; i++){
        _getPolyline(RouteData.documents[i].data, RouteData.documents[i].documentID);
      }
    }
  });
  setState(() {
  });
}

void _getPolyline(info, infoID) async{
      print(info);}

当我打印时,info它将多次显示数据。

结果 这是结果。正如你所看到的,它从那时开始,test然后又重复了一段时间。我的代码有问题吗?先感谢您。test1test

标签: fluttergoogle-cloud-firestore

解决方案


调用setState将触发您的小部件的重建。我认为正在发生的是,当getRoute()您还触发您的构建功能时,该功能将触发getRoute() 再次运行。

解决方案:确保您的功能在构建期间没有被触发。你可以通过只触发一次你的函数来做到这一点initState

要么是因为你正在使用snapshots().listen. 这将监听该集合上发生的任何更改。

解决方案:使用.get()代替.listen()

要读取一次集合或文档,请调用 Query.get 或 DocumentReference.get 方法。在下面的示例中,FutureBuilder 用于帮助管理请求的状态: https ://firebase.flutter.dev/docs/firestore/usage/#one-time-read


推荐阅读