import 'dart:async'; import 'dart:typed_data'; import 'package:enum_to_string/enum_to_string.dart'; import 'package:flutter/material.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:manager_api/api.dart'; import 'package:provider/provider.dart'; import 'package:tablet_app/Models/map-marker.dart'; import 'package:tablet_app/Screens/Map/map_context.dart'; class GoogleMapView extends StatefulWidget { final MapDTO? mapDTO; final Uint8List? selectedMarkerIcon; final String? language; const GoogleMapView({ Key? key, this.mapDTO, this.selectedMarkerIcon, this.language, }) : super(key: key); @override _GoogleMapViewState createState() => _GoogleMapViewState(); } class _GoogleMapViewState extends State { ConfigurationDTO? configurationDTO; Completer _controller = Completer(); Set markers = {}; List markersList = []; Set getMarkers(language, mapContext) { markers = {}; widget.mapDTO!.points!.forEach((point) { var mapMarker = new MapMarker( id: point.id, title: point.title!.firstWhere((translation) => translation.language == language).value, description: point.description!.firstWhere((translation) => translation.language == language).value, longitude: point.longitude, latitude: point.latitude, images: point.images ); markersList.add(mapMarker); }); markersList.forEach((element) { if (element.latitude != null && element.longitude != null) { markers.add(Marker( draggable: false, markerId: MarkerId(element.latitude! + element.longitude!), position: LatLng( double.tryParse(element.latitude!)!, double.tryParse(element.longitude!)!, ), icon: BitmapDescriptor.fromBytes(widget.selectedMarkerIcon!), /*icon: BitmapDescriptor.defaultMarkerWithHue( BitmapDescriptor.hueYellow, ),*/ onTap: () { //setState(() { mapContext.setSelectedMarker( new MapMarker( title: element.title, images: element.images, description: element.description, longitude: element.longitude, latitude: element.latitude, )); //}); }, infoWindow: InfoWindow(title: element.title))); } }); return markers; } @override void initState() { super.initState(); } @override void dispose() { // TODO: implement dispose super.dispose(); } @override Widget build(BuildContext context) { final mapContext = Provider.of(context); Size size = MediaQuery.of(context).size; return GoogleMap( mapType: widget.mapDTO!.mapType != null ? EnumToString.fromString(MapType.values, widget.mapDTO!.mapType.toString())!: MapType.hybrid, mapToolbarEnabled: false, initialCameraPosition: CameraPosition( target: LatLng(50.416639, 4.879169), zoom: widget.mapDTO!.zoom != null ? widget.mapDTO!.zoom!.toDouble() : 18, ), onMapCreated: (GoogleMapController controller) { _controller.complete(controller); }, markers: getMarkers(widget.language, mapContext), onTap: (LatLng location) { //setState(() { print(location); mapContext.setSelectedMarker( new MapMarker( title: '', description: '', images: null, longitude: null, latitude: null )); // }); }, ); } }