import 'package:flutter/material.dart'; import 'package:flutter_map/flutter_map.dart'; import 'package:latlong2/latlong.dart'; import 'package:url_launcher/url_launcher.dart'; /// Vollbild-OSM-Karte, entspricht dem Leaflet-`#map` im HTML-Demonstrator: /// randlos, ohne Zoom-Buttons (Pinch-to-Zoom/Pan reicht), Standard-OSM-Tiles. class MissionMap extends StatelessWidget { const MissionMap({super.key, this.mapController, this.waypointMarkers = const []}); final MapController? mapController; /// Kreis-Marker fuer die Wegpunkte der aktuellen Mission (Doku 3.7). final List waypointMarkers; // Default-Zentrum/Zoom uebernommen aus dem HTML-Demonstrator // (Drone Mission Control.html: L.map(...).setView([52.3676, 4.9041], 16)). static const _initialCenter = LatLng(52.3676, 4.9041); static const _initialZoom = 16.0; @override Widget build(BuildContext context) { return FlutterMap( mapController: mapController, options: const MapOptions( initialCenter: _initialCenter, initialZoom: _initialZoom, minZoom: 3, maxZoom: 19, ), children: [ TileLayer( urlTemplate: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png', userAgentPackageName: 'de.dmc.dmc_app', maxZoom: 19, ), CircleLayer(circles: waypointMarkers), SimpleAttributionWidget( alignment: Alignment.bottomLeft, source: const Text('OpenStreetMap contributors'), onTap: () => launchUrl(Uri.parse('https://www.openstreetmap.org/copyright')), ), ], ); } }