import 'dart:async'; import 'package:flutter/material.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import '../../packages/ambito_theme/ambito_theme.dart'; class MapWidget extends StatefulWidget { const MapWidget({super.key, required this.markers, required this.polygons}); final Set? markers; final Set? polygons; @override State createState() => MapWidgetState(); } class MapWidgetState extends State { final Completer _controller = Completer(); bool _drawPolygon = false; int _counter = 0; static CameraPosition _initialPos = const CameraPosition( target: LatLng(0, 0), zoom: 14.4746, ); @override void initState() { if (widget.markers != null) { setState(() { _initialPos = CameraPosition(target: widget.markers!.first.position, zoom: 14); }); } super.initState(); } @override Widget build(BuildContext context) { final AmbitoTheme theme = getTheme(context); return ClipRRect( borderRadius: BorderRadius.circular(10.0), child: SizedBox( width: double.infinity, height: 600, child: Column( children: [ Row( children: [ Spacer(), IconButton( onPressed: () { setState(() { _drawPolygon = !_drawPolygon; }); }, icon: Icon( Icons.polyline_outlined, color: (_drawPolygon ? theme.currentColorScheme.primary : theme.currentColorScheme.outline), )) ], ), Expanded( child: GoogleMap( onTap: (position) { if (_drawPolygon == true) { setState(() { widget.markers?.add(Marker( markerId: MarkerId('polygon_$_counter'), position: position)); _counter++; }); } }, mapToolbarEnabled: true, mapType: MapType.hybrid, markers: widget.markers ?? {}, polygons: widget.polygons ?? {}, initialCameraPosition: _initialPos, onMapCreated: (GoogleMapController controller) { _controller.complete(controller); }, ), ), ], )), ); } }