tablet-app/lib/Screens/Map/map_view.dart
2021-07-14 20:44:55 +02:00

183 lines
6.0 KiB
Dart

import 'dart:async';
import 'dart:convert';
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:managerapi/api.dart';
import 'package:provider/provider.dart';
import 'package:tablet_app/Components/loading.dart';
import 'package:tablet_app/Models/map-marker.dart';
import 'dart:ui' as ui;
import 'package:flutter/widgets.dart';
import 'package:tablet_app/Screens/Map/marker_view.dart';
import '../../app_context.dart';
import 'map_context.dart';
Set<Marker> markers = {};
List<MapMarker> markersList = List();
class MapViewWidget extends StatefulWidget {
final SectionDTO section;
MapViewWidget({Key key, this.section}) : super(key: key);
@override
_MapViewWidget createState() => _MapViewWidget();
}
class _MapViewWidget extends State<MapViewWidget> {
MapDTO mapDTO;
Completer<GoogleMapController> _controller = Completer();
Uint8List selectedMarkerIcon;
Future<Uint8List> getBytesFromAsset(String path, int width) async {
ByteData data = await rootBundle.load(path);
ui.Codec codec = await ui.instantiateImageCodec(data.buffer.asUint8List(),
targetWidth: width);
ui.FrameInfo fi = await codec.getNextFrame();
return (await fi.image.toByteData(format: ui.ImageByteFormat.png))
.buffer
.asUint8List();
}
Set<Marker> getMarkers(appContext, mapContext) {
/*final Uint8List userMarkerIcon =
await getBytesFromAsset('assets/normalMarker.png', 75);
*/
markers = {};
mapDTO.points.forEach((point) {
var mapMarker = new MapMarker(
id: point.id,
title: point.title.firstWhere((translation) => translation.language == appContext.getContext().language).value,
description: point.description.firstWhere((translation) => translation.language == appContext.getContext().language).value,
longitude: point.longitude,
latitude: point.latitude,
images: point.images
);
print("MAP MARKERRRR ---------------------------------------------------");
print(mapMarker.toString());
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(selectedMarkerIcon),
/*icon: BitmapDescriptor.defaultMarkerWithHue(
BitmapDescriptor.hueYellow,
),*/
onTap: () {
print('hello you 1');
setState(() {
mapContext.setSelectedMarker(
new MapMarker(
title: element.title,
description: element.description,
longitude: element.longitude,
latitude: element.latitude
));
});
},
infoWindow: InfoWindow(title: element.title)));
}
});
return markers;
}
@override
void initState() {
print(widget.section.data);
mapDTO = MapDTO.fromJson(jsonDecode(widget.section.data));
print(mapDTO);
super.initState();
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
}
/*static final CameraPosition _kLake = CameraPosition(
bearing: 192.8334901395799,
target: LatLng(37.43296265331129, -122.08832357078792),
tilt: 59.440717697143555,
zoom: 59.151926040649414);*/
@override
Widget build(BuildContext context) {
final mapContext = Provider.of<MapContext>(context);
final appContext = Provider.of<AppContext>(context);
return Stack(
children: <Widget>[
FutureBuilder(
future: getByteIcon(),
builder: (context, AsyncSnapshot<dynamic> snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return GoogleMap(
//mapType: mapDTO.mapType, // TODO mapDTO.mapType,
mapToolbarEnabled: false,
initialCameraPosition: CameraPosition(
target: LatLng(50.416639, 4.879169),
zoom: mapDTO.zoom != null ? mapDTO.zoom.toDouble() : 18,
),
onMapCreated: (GoogleMapController controller) {
_controller.complete(controller);
},
markers: getMarkers(appContext, mapContext),
onTap: (LatLng location) {
/*setState(() {
print(location);
mapContext.setSelectedMarker(
new MapMarker(
title: '',
description: '',
longitude: null,
latitude: null
));
});*/
},
);
} else if (snapshot.connectionState == ConnectionState.none) {
return Text("No data");
} else {
return Center(
child: Container(
child: Loading()
)
);
}
}
),
MarkerViewWidget()
]
/*floatingActionButton: FloatingActionButton.extended(
onPressed: _goToTheLake,
label: Text('To the lake!'),
icon: Icon(Icons.directions_boat),
),*/
);
}
getByteIcon() async {
selectedMarkerIcon = await getBytesFromAsset('assets/images/strawberry.png', 50);
}
/*Future<void> _goToTheLake() async {
final GoogleMapController controller = await _controller.future;
controller.animateCamera(CameraUpdate.newCameraPosition(_kLake));
}*/
}