Сортировка списка карт по широте и долготе в flutter от firestore
Пытаясь отсортировать свой список карт по широте и долготе, которые я установил в качестве полей в Firestore для местоположения пользователя в Flutter (по их широте и долготе). Кто-нибудь знает, как это сделать? Мой код ниже в функции сортировки только изменил порядок моих карточек по убыванию документов в моей базе данных:
import 'dart:async'; import 'package:geolocator/geolocator.dart'; import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:swiftbee/Cards/Merchant Card.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; class BakeryList extends StatefulWidget { @override _BakeryListState createState() => _BakeryListState(); } class _BakeryListState extends State<BakeryList> { StreamSubscription<QuerySnapshot> subscription; List bakeryList; final CollectionReference collectionReference = Firestore.instance.collection('bakeries'); Geolocator geolocator = Geolocator(); Position userLocation; Future<Position> getLocation() async { var currentLocation; try { currentLocation = await geolocator.getCurrentPosition( desiredAccuracy: LocationAccuracy.best); } catch (e) { currentLocation = null; } return currentLocation; } @override void initState() { super.initState(); subscription = collectionReference.snapshots().listen((data) { setState(() { bakeryList = data.documents; }); }); } @override Widget build(BuildContext context) { return bakeryList != null ? ListView.builder( itemCount: bakeryList.length, itemBuilder: (context, index) { String imgPath = bakeryList[index].data['image']; String merchantTextPath = bakeryList[index].data['name']; String locationNamePath = bakeryList[index].data['location']; double latitudePath = bakeryList[index].data['latitude']; double longitudePath = bakeryList[index].data['longitude']; String geoPath = '$latitudePath, $longitudePath'; void distanceCalc() async { userLocation = await getLocation(); final double myPositionLat = userLocation.latitude; final double myPositionLong = userLocation.longitude; final double Lat = bakeryList[index].data['latitude']; final double Long = bakeryList[index].data['longitude']; final DistanceInMetres = await Geolocator().distanceBetween(myPositionLat, myPositionLong, Lat, Long)/1000; final Time = DistanceInMetres / 12 * 60; bakeryList.sort((a, b){ return DistanceInMetres.toInt(); }); } distanceCalc(); return BakeryCard( etaText: '', locationText: locationNamePath, merchantText: bakeryTextPath, assetImage: Image.network(imgPath), function: (){}); }) : Center(child: CircularProgressIndicator(), ); } }
Что я уже пробовал:
Попытался отсортировать его с помощью функции compareTo между двумя строками '$myPositionLat, $myPositionLong' и '$geoPath'. Это тоже не сработало.