ambito/lib/src/widgets/map/map_widget.dart

95 lines
2.7 KiB
Dart
Raw Normal View History

2024-12-07 20:53:13 +01:00
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
2024-12-09 14:04:43 +01:00
import '../../packages/ambito_theme/ambito_theme.dart';
2024-12-07 20:53:13 +01:00
class MapWidget extends StatefulWidget {
const MapWidget({super.key, required this.markers, required this.polygons});
final Set<Marker>? markers;
final Set<Polygon>? polygons;
@override
State<StatefulWidget> createState() => MapWidgetState();
}
class MapWidgetState extends State<MapWidget> {
final Completer<GoogleMapController> _controller =
Completer<GoogleMapController>();
2024-12-09 14:04:43 +01:00
bool _drawPolygon = false;
int _counter = 0;
2024-12-09 12:17:12 +01:00
2024-12-07 20:53:13 +01:00
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) {
2024-12-09 14:04:43 +01:00
final AmbitoTheme theme = getTheme(context);
2024-12-07 20:53:13 +01:00
return ClipRRect(
borderRadius: BorderRadius.circular(10.0),
child: SizedBox(
2024-12-09 14:04:43 +01:00
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);
},
),
),
],
)),
2024-12-07 20:53:13 +01:00
);
}
}