mirror of
https://bitbucket.org/FransoletThomas/tablet-app.git
synced 2025-12-06 16:41:19 +00:00
122 lines
3.9 KiB
Dart
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
|
|
));
|
|
// });
|
|
},
|
|
);
|
|
}
|
|
|
|
} |