flutter - Firestore 中的重复数据
问题描述
嗨,我在这里使用此代码从 Firestore 检索数据。数据在 a 中Map
,这是我的 Firestore 的图片。
这是我从 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
它将多次显示数据。
解决方案
调用setState
将触发您的小部件的重建。我认为正在发生的是,当getRoute()
您还触发您的构建功能时,该功能将触发getRoute()
再次运行。
解决方案:确保您的功能在构建期间没有被触发。你可以通过只触发一次你的函数来做到这一点initState
要么是因为你正在使用snapshots().listen
. 这将监听该集合上发生的任何更改。
解决方案:使用.get()
代替.listen()
要读取一次集合或文档,请调用 Query.get 或 DocumentReference.get 方法。在下面的示例中,FutureBuilder 用于帮助管理请求的状态: https ://firebase.flutter.dev/docs/firestore/usage/#one-time-read
推荐阅读
- string - Liquid:用表达式替换字符串
- thymeleaf - 使用 Spring WebFlux 和 Thymeleaf 进行重定向后获取
- mysql - docker中的巨大静态(mysql)数据库
- android - 页面固定在recyclerview中的特定帖子
- arrays - how to get all individual matches from a regex in perl?
- django - Django - 使用自定义用户模型进行身份验证返回无
- java - 画圈的动画
- mysql - MYSQL-how to insert geometry data
- c++ - c++ type alias not working when testing specialization
- php - 在php中将整个网站重定向到新网站的主页