Created
January 30, 2021 17:04
-
-
Save olayemii/43bbedc0716d3b66bbd7e8577bcc8580 to your computer and use it in GitHub Desktop.
Adding polylines to Google Maps on flutter
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'dart:async'; | |
import 'package:google_maps_flutter/google_maps_flutter.dart'; | |
import 'package:flutter/material.dart'; | |
void main() => runApp(MyApp()); | |
class MyApp extends StatefulWidget { | |
@override | |
_MyAppState createState() => _MyAppState(); | |
} | |
// Starting point latitude | |
double _originLatitude = 6.5212402; | |
// Starting point longitude | |
double _originLongitude = 3.3679965; | |
// Destination latitude | |
double _destLatitude = 6.849660; | |
// Destination Longitude | |
double _destLongitude = 3.648190; | |
// Markers to show points on the map | |
Map<MarkerId, Marker> markers = {}; | |
PolylinePoints polylinePoints = PolylinePoints(); | |
Map<PolylineId, Polyline> polylines = {}; | |
class _MyAppState extends State<MyApp> { | |
// Google Maps controller | |
Completer<GoogleMapController> _controller = Completer(); | |
// Configure map position and zoom | |
static final CameraPosition _kGooglePlex = CameraPosition( | |
target: LatLng(_originLatitude, _originLongitude), | |
zoom: 9.4746, | |
); | |
@override | |
void initState() { | |
/// add origin marker origin marker | |
_addMarker( | |
LatLng(_originLatitude, _originLongitude), | |
"origin", | |
BitmapDescriptor.defaultMarker, | |
); | |
// Add destination marker | |
_addMarker( | |
LatLng(_destLatitude, _destLongitude), | |
"destination", | |
BitmapDescriptor.defaultMarkerWithHue(90), | |
); | |
_getPolyline(); | |
super.initState(); | |
} | |
@override | |
Widget build(BuildContext context) { | |
return MaterialApp( | |
title: 'Welcome to Flutter', | |
home: Scaffold( | |
appBar: AppBar( | |
title: Text('Welcome to Flutter'), | |
), | |
body: GoogleMap( | |
mapType: MapType.normal, | |
initialCameraPosition: _kGooglePlex, | |
myLocationEnabled: true, | |
tiltGesturesEnabled: true, | |
compassEnabled: true, | |
scrollGesturesEnabled: true, | |
zoomGesturesEnabled: true, | |
polylines: Set<Polyline>.of(polylines.values), | |
markers: Set<Marker>.of(markers.values), | |
onMapCreated: (GoogleMapController controller) { | |
_controller.complete(controller); | |
}, | |
), | |
), | |
); | |
} | |
// This method will add markers to the map based on the LatLng position | |
_addMarker(LatLng position, String id, BitmapDescriptor descriptor) { | |
MarkerId markerId = MarkerId(id); | |
Marker marker = | |
Marker(markerId: markerId, icon: descriptor, position: position); | |
markers[markerId] = marker; | |
} | |
_addPolyLine(List<LatLng> polylineCoordinates) { | |
PolylineId id = PolylineId("poly"); | |
Polyline polyline = Polyline( | |
polylineId: id, | |
points: polylineCoordinates, | |
width: 8, | |
); | |
polylines[id] = polyline; | |
setState(() {}); | |
} | |
void _getPolyline() async { | |
List<LatLng> polylineCoordinates = []; | |
PolylineResult result = await polylinePoints.getRouteBetweenCoordinates( | |
"YOUR API KEY HERE", | |
PointLatLng(_originLatitude, _originLongitude), | |
PointLatLng(_destLatitude, _destLongitude), | |
travelMode: TravelMode.driving, | |
); | |
if (result.points.isNotEmpty) { | |
result.points.forEach((PointLatLng point) { | |
polylineCoordinates.add(LatLng(point.latitude, point.longitude)); | |
}); | |
} else { | |
print(result.errorMessage); | |
} | |
_addPolyLine(polylineCoordinates); | |
} | |
} |
@Balaji8555 do you see any errors? And have you activated:
- Maps SDK for Android
- Maps SDK for iOS
- Directions API?
you know how i show it in flutter web, I have coordinates of two points I just want polylines like your in between the points
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
When copy this code , not shown polyline between two locations, but shown only markers .