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 markers = {}; List 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 { MapDTO mapDTO; Completer _controller = Completer(); Uint8List selectedMarkerIcon; Future 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 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(context); final appContext = Provider.of(context); return Stack( children: [ FutureBuilder( future: getByteIcon(), builder: (context, AsyncSnapshot 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 _goToTheLake() async { final GoogleMapController controller = await _controller.future; controller.animateCamera(CameraUpdate.newCameraPosition(_kLake)); }*/ }