簡體   English   中英

Flutter Firestore 如何訂購由 stream 基於距離

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM