如何解决在Flutter中同时进行Firebase分页和过滤
我有一组办公室,可以从Firebase(Cloud Firestore)查询,然后只需要显示与用户相距一定距离(例如20英里)的办公室。我不能为此查询使用db.collection('offices')。where(...)。
我必须查询所有办公室,然后计算每个办公室与当前用户的距离,如果距离小于20英里,我将为用户列出办公室。但是问题是我的收藏夹中可能有数百万个办公室,这意味着对于每个用户,我要读取数百万个数据,以显示可能只有不到100个办公室(距离他/她20英里以内)。
这里有2个问题-1)如何执行此查询而不必阅读此集合中的所有文档。 2)如何对结果进行分页,以便即使有100个办公室落在期望的距离内,我仍然希望分10个批次显示(获取前10个过滤的文档,一旦用户滚动到末尾,获取下一个10等)。
解决方法
您可以使用geolocator包存储办公室的纬度和经度,然后使用where子句过滤位置。 这篇文章包含如何实现geolocator软件包: Obtain coordinates from an address flutter
获取并保存每个办公室的地理定位器后,您可以使用以下两个where子句查询它:
// Get user's latitude and longitude from current location and then
var lat = userLatitude;
var long = userLongitude;
Firestore.instance
.collection('addresses')
.where('latitude',isLessThanOrEqualTo: lat)
.where('longitude',isLessThanOrEqualTo: long)
.getDocuments()
.then(snapshots => {
// Do Stuff here
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。