how to send request to nearest driver in order to booking a ride or cab's, but I want just when I click on request button the driver will automatically found the nearest one. I used geo_fire plugin for nearby drivers but I want to pick nearest driver to the user location and I stored drivers location in list. if any one have any answer or information about this particular problem please share it it will great full to be received thanks.
Future<void> initGeoFire() async {
LocationData position = await _location.getLocation();
locationData = position;
await Geofire.initialize("availableDrivers");
try {
streamSubscriptionQueryAtDriversLoc = Geofire.queryAtLocation(
locationData!.latitude!,
locationData!.longitude!,
nearbyDriversRadius)!
.listen((map) {
// debugPrint(map);
if (map != null) {
var callBack = map['callBack'];
//latitude will be retrieved from map['latitude']
//longitude will be retrieved from map['longitude']
switch (callBack) {
case Geofire.onKeyEntered:
NearbyDrivers nearbyDrivers = NearbyDrivers();
// nearbyDrivers.key ??= map["key"];
nearbyDrivers.key = map["key"];
nearbyDrivers.latitude = map["latitude"];
nearbyDrivers.longitude = map["longitude"];
GeoFireAssistant.neaByDriversList.add(nearbyDrivers);
if (availableDriversStatus == true) {
updateAvailableDriversOnMap();
}
break;
case Geofire.onKeyExited:
// keysRetrieved.remove(map["key"]);
GeoFireAssistant.deleteDriversById(map["key"]);
updateAvailableDriversOnMap();
break;
case Geofire.onKeyMoved:
// Update your key's location
NearbyDrivers nearbyDrivers = NearbyDrivers();
nearbyDrivers.key = map["key"];
nearbyDrivers.latitude = map["latitude"];
nearbyDrivers.longitude = map["longitude"];
GeoFireAssistant.updateDriverOnMoved(nearbyDrivers);
updateAvailableDriversOnMap();
break;
case Geofire.onGeoQueryReady:
updateAvailableDriversOnMap();
// All Initial Data is loaded
debugPrint(map['result']);
break;
}
}
if (!mounted) return;
setState(() {});
});
} catch (e) {
debugPrint(e.toString());
FirebaseErrorHandling().flutterToast("$e");
}
}
class GeoFireAssistant {
static List<NearbyDrivers> neaByDriversList = [];
static void deleteDriversById(String id) {
int delete = neaByDriversList.indexWhere((key) => key.key == id);
class NearbyDrivers {
String? key;
double? latitude;
double? longitude;
NearbyDrivers({this.key, this.latitude, this.longitude});
}
neaByDriversList.removeAt(delete);
}
static void updateDriverOnMoved(NearbyDrivers drivers) {
int index = neaByDriversList.indexWhere((key) => key.key == drivers.key);
neaByDriversList[index].latitude = drivers.latitude;
neaByDriversList[index].longitude = drivers.longitude;
}