tablet-app/lib/Screens/Map/google_map_view.dart
2021-08-24 18:36:57 +02:00

122 lines
3.9 KiB
Dart

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:managerapi/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<GoogleMapView> {
ConfigurationDTO configurationDTO;
Completer<GoogleMapController> _controller = Completer();
Set<Marker> markers = {};
List<MapMarker> markersList = List();
Set<Marker> 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<MapContext>(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
));
// });
},
);
}
}