import 'dart:async'; import 'dart:convert'; import 'dart:typed_data'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.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/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 'package:http/http.dart' as http; import '../../app_context.dart'; import 'google_map_view.dart'; import 'package:image/image.dart' as IMG; Set markers = {}; List markersList = []; 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(ByteData data, 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(); } @override void initState() { mapDTO = MapDTO.fromJson(jsonDecode(widget.section!.data!)); 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(mapDTO!.iconSource), builder: (context, AsyncSnapshot snapshot) { if (snapshot.connectionState == ConnectionState.done) { print("snapshot"); print(snapshot.data); print(selectedMarkerIcon); return GoogleMapView(language: appContext.getContext().language, mapDTO: mapDTO!, selectedMarkerIcon: selectedMarkerIcon); } 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(String? source) async { if(source != null) { if(kIsWeb) { Uint8List fileData = await http.readBytes(Uri.parse(source)); selectedMarkerIcon = resizeImage(fileData, 40); } else { final ByteData imageData = await NetworkAssetBundle(Uri.parse(source)).load(""); selectedMarkerIcon = await getBytesFromAsset(imageData, 50); } } } Uint8List resizeImage(Uint8List data, int width) { Uint8List resizedData = data; IMG.Image img = IMG.decodeImage(data)!; IMG.Image resized = IMG.copyResize(img, width: width); resizedData = Uint8List.fromList(IMG.encodeJpg(resized)); return resizedData; } /*Future _goToTheLake() async { final GoogleMapController controller = await _controller.future; controller.animateCamera(CameraUpdate.newCameraPosition(_kLake)); }*/ }