123 lines
3.7 KiB
Dart
123 lines
3.7 KiB
Dart
import 'dart:async';
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
|
import 'package:google_polyline_algorithm/google_polyline_algorithm.dart';
|
|
import 'package:ride/constant/colors.dart';
|
|
import 'package:ride/controller/functions/location_controller.dart';
|
|
|
|
import '../../../constant/credential.dart';
|
|
import '../../../constant/links.dart';
|
|
import '../../functions/crud.dart';
|
|
|
|
class MapDirection extends GetxController {
|
|
bool isLoading = true;
|
|
List data = [];
|
|
LatLngBounds? boundsData;
|
|
BitmapDescriptor carIcon = BitmapDescriptor.defaultMarker;
|
|
final List<LatLng> polylineCoordinates = [];
|
|
List<Polyline> polyLines = [];
|
|
Set<Marker> markers = {};
|
|
|
|
void clearPolyline() {
|
|
polyLines = [];
|
|
polylineCoordinates.clear();
|
|
update();
|
|
}
|
|
|
|
void updateMarker() {
|
|
// Remove the existing marker with the ID `MyLocation`.
|
|
markers.remove(MarkerId('MyLocation'.tr));
|
|
|
|
// Add a new marker with the ID `MyLocation` at the current location of the user.
|
|
LocationController locationController = Get.find<LocationController>();
|
|
markers.add(Marker(
|
|
markerId: MarkerId('MyLocation'.tr),
|
|
position: locationController.myLocation,
|
|
draggable: true,
|
|
icon: carIcon,
|
|
// infoWindow: const InfoWindow(
|
|
// title: 'Time',
|
|
// ),
|
|
));
|
|
|
|
// Update the `markers` set and call the `update()` method on the controller to notify the view that the marker position has changed.
|
|
update();
|
|
|
|
// Reload the marker after 3 seconds.
|
|
Future.delayed(const Duration(seconds: 3), () {
|
|
updateMarker();
|
|
});
|
|
}
|
|
|
|
void addCustomCarIcon() {
|
|
ImageConfiguration config = ImageConfiguration(
|
|
size: Size(Get.width * .6, Get.height * .6),
|
|
// scale: 1.0,
|
|
);
|
|
BitmapDescriptor.fromAssetImage(config, 'assets/images/car.png')
|
|
.then((value) {
|
|
carIcon = value;
|
|
update();
|
|
});
|
|
}
|
|
|
|
getMap(String origin, destination) async {
|
|
isLoading = false;
|
|
|
|
update();
|
|
|
|
var url =
|
|
('${AppLink.googleMapsLink}directions/json?&language=en&avoid=tolls|ferries&destination=$destination&origin=$origin&key=${AppCredintials.mapAPIKEY}');
|
|
|
|
var response = await CRUD().getGoogleApi(link: url, payload: {});
|
|
data = response['routes'][0]['legs'];
|
|
print(data);
|
|
final points =
|
|
decodePolyline(response["routes"][0]["overview_polyline"]["points"]);
|
|
for (int i = 0; i < points.length; i++) {
|
|
double lat = points[i][0].toDouble();
|
|
double lng = points[i][1].toDouble();
|
|
polylineCoordinates.add(LatLng(lat, lng));
|
|
}
|
|
if (polyLines.isNotEmpty) {
|
|
clearPolyline();
|
|
var polyline = Polyline(
|
|
polylineId: PolylineId(response["routes"][0]["summary"]),
|
|
points: polylineCoordinates,
|
|
width: 10,
|
|
color: AppColor.blueColor,
|
|
);
|
|
polyLines.add(polyline);
|
|
// rideConfirm = false;
|
|
update();
|
|
} else {
|
|
var polyline = Polyline(
|
|
polylineId: PolylineId(response["routes"][0]["summary"]),
|
|
points: polylineCoordinates,
|
|
width: 10,
|
|
color: AppColor.blueColor,
|
|
);
|
|
|
|
polyLines.add(polyline);
|
|
// rideConfirm = false;
|
|
update();
|
|
}
|
|
}
|
|
|
|
@override
|
|
void onInit() {
|
|
// Get the passenger location from the arguments.
|
|
String passengerLocation = Get.arguments['passengerLocation'];
|
|
String lat = Get.find<LocationController>().myLocation.latitude.toString();
|
|
String lng = Get.find<LocationController>().myLocation.longitude.toString();
|
|
String origin = '$lat,$lng';
|
|
// Set the origin and destination coordinates for the Google Maps directions request.
|
|
getMap(origin, passengerLocation);
|
|
addCustomCarIcon();
|
|
updateMarker();
|
|
super.onInit();
|
|
}
|
|
}
|