[英]Flutter Firestore how to orderBy a stream based on distance
我有一个 stream 构建器而不是返回一个 listview.builder
StreamBuilder(
stream: FirebaseFirestore.instance
.collection('posts')
.orderBy(
'location',
descending: true,
)
.snapshots(),
builder: (context,
AsyncSnapshot<QuerySnapshot<Map<String, dynamic>>> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(
child: CircularProgressIndicator(
color: primaryColor,
),
);
}
//display posts
return ListView.builder(
如何将快照排序到最接近的位置? 我尝试将以下方法包含在 .orderBy() 部分中,但它似乎不起作用。
double calculateDistance(lat1, lon1, lat2, lon2) {
var p = 0.017453292519943295;
var c = cos;
var a = 0.5 -
c((lat2 - lat1) * p) / 2 +
c(lat1 * p) * c(lat2 * p) * (1 - c((lon2 - lon1) * p)) / 2;
var result = 12742 * asin(sqrt(a));
return double.parse(result.toStringAsFixed(2));
}
您将需要在客户端应用程序代码中执行排序。
您可以做的是从数据库中获取一定范围内的结果列表的近似值(如地理查询的文档解决方案中所示),但结果不会按距离排序,因此您必须重新- 也在那里订购。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.