import 'dart:collection'; import 'package:fast_network_navigation/structs/landmark.dart'; import 'package:fast_network_navigation/structs/trip.dart'; import 'package:flutter/material.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; class MapWidget extends StatefulWidget { final Future<Trip>? trip; MapWidget({ this.trip }); @override State<MapWidget> createState() => _MapWidgetState(); } class _MapWidgetState extends State<MapWidget> { late GoogleMapController mapController; // coordinates of Paris CameraPosition _cameraPosition = CameraPosition( target: LatLng(48.8566, 2.3522), zoom: 11.0, ); Set<Marker> markers = <Marker>{}; void _onMapCreated(GoogleMapController controller) { mapController = controller; drawLandmarks(); } void _onCameraIdle() { // print(mapController.getLatLng(ScreenCoordinate(x: 0, y: 0))); } void drawLandmarks() async { // (re)draws landmarks on the map Trip? trip = await widget.trip; LinkedList<Landmark> landmarks = trip!.landmarks; setState(() { for (Landmark landmark in landmarks) { markers.add(Marker( markerId: MarkerId(landmark.name), position: LatLng(landmark.location[0], landmark.location[1]), infoWindow: InfoWindow(title: landmark.name, snippet: landmark.type.name), )); } }); } @override Widget build(BuildContext context) { return GoogleMap( onMapCreated: _onMapCreated, initialCameraPosition: _cameraPosition, onCameraIdle: _onCameraIdle, // onLongPress: , markers: markers, ); } }