diff options
| author | Aldrik Ramaekers <aldrik@amftech.nl> | 2023-10-03 19:28:09 +0200 |
|---|---|---|
| committer | Aldrik Ramaekers <aldrik@amftech.nl> | 2023-10-03 19:28:09 +0200 |
| commit | 645e797b1b45fb2212198c0e63208d44c159a3c9 (patch) | |
| tree | 73f7c1086366b54b03922c978c9926a81a027cb3 /lib/navigation | |
| parent | de965e5e165aa53d4900f8b616fba103fbe37844 (diff) | |
osm work
Diffstat (limited to 'lib/navigation')
| -rw-r--r-- | lib/navigation/openstreetmapNavigation.dart | 194 |
1 files changed, 86 insertions, 108 deletions
diff --git a/lib/navigation/openstreetmapNavigation.dart b/lib/navigation/openstreetmapNavigation.dart index f8f37df..1ad2d7b 100644 --- a/lib/navigation/openstreetmapNavigation.dart +++ b/lib/navigation/openstreetmapNavigation.dart @@ -1,4 +1,6 @@ import 'dart:async'; +import 'package:flutter_map/flutter_map.dart' as FlutterMap; +import 'package:flutter_map/plugin_api.dart'; import 'package:flutter_osm_plugin/flutter_osm_plugin.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -13,6 +15,7 @@ import 'package:training_planner/navigation/baseNavigation.dart'; import 'package:training_planner/pages/navigation_page.dart'; import 'package:training_planner/route.dart'; import '../route.dart' as DHLRoute; +import 'package:latlong2/latlong.dart'; class OpenstreetmapNavigation extends BaseNavigation { OpenstreetmapNavigation({Key? key, required route}) @@ -25,20 +28,24 @@ class OpenstreetmapNavigation extends BaseNavigation { class _OpenstreetNavigationState extends BaseNavigationState with OSMMixinObserver { late List<RoadInfo> roads; - late MapController controller; + late FlutterMap.MapController controller; + GlobalKey<ScaffoldState> _scaffoldKey = + new GlobalKey(); //so we can call snackbar from anywhere + + late LatLng startPosition = LatLng(0, 0); @override void initState() { widget.routeSectionCursor = 0; widget.currentZoom = 10; - controller = MapController( - initMapWithUserPosition: true, - areaLimit: BoundingBox( - east: 7.601818, - north: 53.703101, - south: 50.679237, - west: 2.894101, - )); + controller = FlutterMap.MapController(); + + Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high) + .then((value) { + setState(() { + startPosition = LatLng(value.latitude, value.longitude); + }); + }); widget.isLookingAround = true; eventBus.fire(MapPanningEvent(true)); @@ -66,31 +73,33 @@ class _OpenstreetNavigationState extends BaseNavigationState .getBlacklist() .then((value) => {widget.blacklist = value}); - super.initState(); - controller.addObserver(this); + mapIsReady(true); - addRoute(widget.route); + super.initState(); + //controller.addObserver(this); } @override Future<void> mapIsReady(bool isReady) async { + if (widget.allTasks.length != 0) return; addRoute(widget.route); } @override Future<void> addRoute(DHLRoute.Route route) async { - print( - "ASGOPDJS_GH DS*()FHY DS()UFHY) DSU(FHY)DSU( FH)DSUHF)UDS HF)UDSUHF "); if (route.tasks == null) return; - print("234"); - - GeoPoint routeStartCoords = await controller.myLocation(); + Position currentPosition = await Geolocator.getCurrentPosition( + desiredAccuracy: LocationAccuracy.high); + GeoPoint routeStartCoords = GeoPoint( + latitude: currentPosition.latitude, + longitude: currentPosition.longitude); List<GeoPoint> waypoints = [routeStartCoords]; //List<MultiRoadConfiguration> configs = []; groupTasksIntoGroups(route); + /* GeoPoint prevCoord = routeStartCoords; for (var item in widget.parcelNumberPins) { @@ -110,7 +119,8 @@ class _OpenstreetNavigationState extends BaseNavigationState for (var item in widget.parcelNumberPins) { item.isDoublePlannedAddress = isAddressDoublePlanned(item); } -*/ + */ + /* roads = await controller.drawMultipleRoad( configs, @@ -129,12 +139,16 @@ class _OpenstreetNavigationState extends BaseNavigationState @override void dispose() { controller.dispose(); + widget.stopCompletedEvent?.cancel(); + widget.stopIncompletedEvent?.cancel(); super.dispose(); } var mapPointers = 0; var mapPosition; + late List<FlutterMap.Marker> markers = []; + void onMoveStart() { widget.isLookingAround = true; eventBus.fire(MapPanningEvent(true)); @@ -145,47 +159,37 @@ class _OpenstreetNavigationState extends BaseNavigationState @override Widget build(BuildContext context) { return Listener( - onPointerDown: (details) { - if (mapPointers == 0) onMoveStart(); - mapPointers++; - }, - onPointerUp: (details) { - mapPointers--; - if (mapPointers == 0) onMoveEnd(); - }, - behavior: HitTestBehavior.deferToChild, - child: OSMFlutter( - controller: controller, - trackMyPosition: true, - initZoom: widget.currentZoom, - minZoomLevel: 2, - maxZoomLevel: 18, - stepZoom: 1.0, - userLocationMarker: UserLocationMaker( - personMarker: MarkerIcon( - assetMarker: AssetMarker( - image: AssetImage('assets/package.png'), - scaleAssetImage: 1.0), - ), - directionArrowMarker: MarkerIcon( - assetMarker: AssetMarker( - image: AssetImage('assets/package.png'), - scaleAssetImage: 1.0), + onPointerDown: (details) { + if (mapPointers == 0) onMoveStart(); + mapPointers++; + }, + onPointerUp: (details) { + mapPointers--; + if (mapPointers == 0) onMoveEnd(); + }, + behavior: HitTestBehavior.deferToChild, + child: Stack( + children: [ + FlutterMap.FlutterMap( + mapController: controller, + options: MapOptions( + center: startPosition, + bounds: LatLngBounds( + LatLng(53.703101, 7.601818), LatLng(50.679237, 2.894101)), ), - ), - roadConfiguration: RoadOption( - roadColor: Colors.yellowAccent, - ), - markerOption: MarkerOption( - defaultMarker: MarkerIcon( - icon: Icon( - Icons.person_pin_circle, - color: Colors.blue, - size: 56, + children: [ + FlutterMap.TileLayer( + urlTemplate: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png', + userAgentPackageName: 'com.example.app', ), - ), + FlutterMap.MarkerLayer( + markers: markers, + ) + ], ), - )); + ], + ), + ); } @override @@ -193,40 +197,39 @@ class _OpenstreetNavigationState extends BaseNavigationState if (newVal > 18) newVal = 18; if (newVal < 10) newVal = 10; widget.currentZoom = newVal; - await controller.setZoom(zoomLevel: newVal); + + controller.moveAndRotate(controller.center, widget.currentZoom, 0.0); } @override createPinWidget( DestinationPin pin, Color color, DHLCoordinates coords) async { - await controller.addMarker( - GeoPoint( - latitude: pin.coords.lattitude, longitude: pin.coords.longitude), - markerIcon: MarkerIcon( - iconWidget: Container( - height: 65, - width: 150, - child: createPin(pin, color, - isDoublePlannedAddress: pin.isDoublePlannedAddress), - ), - ), - angle: 0); + // poop } @override void flyTo(DHLCoordinates coords) async { - await controller.enableTracking( - enableStopFollow: false, - ); + Position currentPosition = await Geolocator.getCurrentPosition( + desiredAccuracy: LocationAccuracy.high); + + controller.moveAndRotate( + LatLng(currentPosition.latitude, currentPosition.longitude), + widget.currentZoom, + 0.0); } @override - void updateHighlightedRouteSections({bool force = false}) { + void updateHighlightedRouteSections({bool force = false}) async { int maxPins = 300; - for (int i = widget.parcelNumberPins.length - 1; i >= 0; i--) { - DestinationPin pin = widget.parcelNumberPins.elementAt(i); + markers.clear(); + + for (int i = widget.routeSectionCursor - 1; + i < widget.routeSectionCursor + 7; + i++) { + if (i < 0 || i >= widget.parcelNumberPins.length) continue; + DestinationPin pin = widget.parcelNumberPins.elementAt(i); Color color = Color.fromARGB(200, 0, 144, 138); if (i == widget.routeSectionCursor) color = Color.fromARGB(199, 143, 8, 31); @@ -236,39 +239,14 @@ class _OpenstreetNavigationState extends BaseNavigationState color = Color.fromRGBO(143, 8, 31, 0.78); } - bool forceUpdateThisPin = force && - (i > widget.routeSectionCursor - 3 && - i < widget.routeSectionCursor + 3); - - /* - if (!shouldDoublePlannedAddressBeVisible(pin)) { - pin.pin?.unpin(); - pin.pin = null; - continue; - } - - - if (i > routeSectionCursor + 1 && i < routeSectionCursor + maxPins) { - if (forceUpdateThisPin) { - pin.pin?.unpin(); - pin.pin = null; - } else if (pin.pin != null) { - continue; - } - var widgetPin = - createPinWidget(pin, color, widget.destinationCoords[i]); - pin.pin = widgetPin; - } else { - pin.pin?.unpin(); - pin.pin = null; - }*/ - - if (i == widget.routeSectionCursor || - i == widget.routeSectionCursor + 1) { - var widgetPin = - createPinWidget(pin, color, widget.destinationCoords[i]); - pin.pin = widgetPin; - } + markers.add(FlutterMap.Marker( + point: LatLng(pin.coords.lattitude, pin.coords.longitude), + width: 80, + height: 34, + builder: (ctx) => createPin(pin, color, + isDoublePlannedAddress: pin.isDoublePlannedAddress))); } + + setState(() {}); } } |
