У меня есть коллекция в моей базе данных пожарных баз firebase, называемая «пекарни», и внутри коллекции есть серия документов, каждый с полем геопозиции, где я напечатал их широты и долготы. Чтобы получить к ним доступ и увидеть ближайшие пекарни для пользователей, я создал ListView.builder. Но я пытаюсь отсортировать bakeryList по его геопункту относительно текущего местоположения пользователя, и он не работает. Я пробовал это:
bakeryList.sort((a, b){
return a['geopoint'].compareTo(myLocation);
});
Но это не возвращает ближайшие пекарни. Любые идеи будут высоко оценены!
final userLocation = Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
StreamSubscription<QuerySnapshot> subscription;
List <DocumentSnapshot> bakeryList;
final Query collectionReference = Firestore.instance.collection(('bakeries'));
@override
void initState() {
super.initState();
final myLocation = Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
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 bakeryTextPath = bakeryList[index].data['name'];
String locationNamePath = bakeryList[index].data['location name'];
GeoPoint geoPointPath = bakeryList[index].data['geopoint'];
final geolocation = Text('${geoPointPath.latitude}, ${geoPointPath.longitude}');
return BakeryCard(
etaText: '${geoPointPath.latitude}, ${geoPointPath.longitude}',
locationText: locationNamePath,
merchantText: bakeryTextPath,
assetImage: Image.network(imgPath),
function: (){});
})
: Center(child: CircularProgressIndicator(),
);
}