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 polylineCoordinates = []; List polyLines = []; Set 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(); 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().myLocation.latitude.toString(); String lng = Get.find().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(); } }