diff --git a/lib/dev_config.dart b/lib/dev_config.dart index f4a3c4d..a8ca756 100644 --- a/lib/dev_config.dart +++ b/lib/dev_config.dart @@ -62,7 +62,7 @@ bool enableNavigationFeatures({required bool offlineMode}) { } // Marker/node interaction -const int kCameraMinZoomLevel = 10; // Minimum zoom to show nodes (Overpass) +const int kNodeMinZoomLevel = 10; // Minimum zoom to show nodes (Overpass) const int kOsmApiMinZoomLevel = 13; // Minimum zoom for OSM API bbox queries (sandbox mode) const Duration kMarkerTapTimeout = Duration(milliseconds: 250); const Duration kDebounceCameraRefresh = Duration(milliseconds: 500); @@ -77,11 +77,6 @@ const int kProximityAlertMinDistance = 50; // meters const int kProximityAlertMaxDistance = 1000; // meters const Duration kProximityAlertCooldown = Duration(minutes: 10); // Cooldown between alerts for same node -// Last map location and settings storage -const String kLastMapLatKey = 'last_map_latitude'; -const String kLastMapLngKey = 'last_map_longitude'; -const String kLastMapZoomKey = 'last_map_zoom'; - // Tile/OSM fetch retry parameters (for tunable backoff) const int kTileFetchMaxAttempts = 3; const int kTileFetchInitialDelayMs = 4000; @@ -99,13 +94,13 @@ const int kMaxReasonableTileCount = 20000; const int kAbsoluteMaxTileCount = 50000; const int kAbsoluteMaxZoom = 23; -// Camera icon configuration -const double kCameraIconDiameter = 20.0; -const double kCameraRingThickness = 4.0; -const double kCameraDotOpacity = 0.4; // Opacity for the grey dot interior -const Color kCameraRingColorReal = Color(0xC43F55F3); // Real nodes from OSM - blue -const Color kCameraRingColorMock = Color(0xC4FFFFFF); // Add node mock point - white -const Color kCameraRingColorPending = Color(0xC49C27B0); // Submitted/pending nodes - purple -const Color kCameraRingColorEditing = Color(0xC4FF9800); // Node being edited - orange -const Color kCameraRingColorPendingEdit = Color(0xC4757575); // Original node with pending edit - grey -const Color kCameraRingColorPendingDeletion = Color(0xA4F44336); // Node pending deletion - red, slightly transparent +// Node icon configuration +const double kNodeIconDiameter = 20.0; +const double kNodeRingThickness = 4.0; +const double kNodeDotOpacity = 0.4; // Opacity for the grey dot interior +const Color kNodeRingColorReal = Color(0xC43F55F3); // Real nodes from OSM - blue +const Color kNodeRingColorMock = Color(0xC4FFFFFF); // Add node mock point - white +const Color kNodeRingColorPending = Color(0xC49C27B0); // Submitted/pending nodes - purple +const Color kNodeRingColorEditing = Color(0xC4FF9800); // Node being edited - orange +const Color kNodeRingColorPendingEdit = Color(0xC4757575); // Original node with pending edit - grey +const Color kNodeRingColorPendingDeletion = Color(0xA4F44336); // Node pending deletion - red, slightly transparent diff --git a/lib/widgets/camera_icon.dart b/lib/widgets/camera_icon.dart index 33b425b..61f4018 100644 --- a/lib/widgets/camera_icon.dart +++ b/lib/widgets/camera_icon.dart @@ -19,31 +19,31 @@ class CameraIcon extends StatelessWidget { Color get _ringColor { switch (type) { case CameraIconType.real: - return kCameraRingColorReal; + return kNodeRingColorReal; case CameraIconType.mock: - return kCameraRingColorMock; + return kNodeRingColorMock; case CameraIconType.pending: - return kCameraRingColorPending; + return kNodeRingColorPending; case CameraIconType.editing: - return kCameraRingColorEditing; + return kNodeRingColorEditing; case CameraIconType.pendingEdit: - return kCameraRingColorPendingEdit; + return kNodeRingColorPendingEdit; case CameraIconType.pendingDeletion: - return kCameraRingColorPendingDeletion; + return kNodeRingColorPendingDeletion; } } @override Widget build(BuildContext context) { return Container( - width: kCameraIconDiameter, - height: kCameraIconDiameter, + width: kNodeIconDiameter, + height: kNodeIconDiameter, decoration: BoxDecoration( shape: BoxShape.circle, - color: Colors.black.withOpacity(kCameraDotOpacity), + color: Colors.black.withOpacity(kNodeDotOpacity), border: Border.all( color: _ringColor, - width: kCameraRingThickness, + width: kNodeRingThickness, ), ), ); diff --git a/lib/widgets/map/camera_markers.dart b/lib/widgets/map/camera_markers.dart index 99131f0..21db422 100644 --- a/lib/widgets/map/camera_markers.dart +++ b/lib/widgets/map/camera_markers.dart @@ -107,8 +107,8 @@ class CameraMarkersBuilder { return Marker( point: n.coord, - width: kCameraIconDiameter, - height: kCameraIconDiameter, + width: kNodeIconDiameter, + height: kNodeIconDiameter, child: Opacity( opacity: shouldDim ? 0.5 : 1.0, child: CameraMapMarker( diff --git a/lib/widgets/map/camera_refresh_controller.dart b/lib/widgets/map/camera_refresh_controller.dart index bb0f38b..3df21dd 100644 --- a/lib/widgets/map/camera_refresh_controller.dart +++ b/lib/widgets/map/camera_refresh_controller.dart @@ -69,12 +69,12 @@ class CameraRefreshController { } final zoom = controller.mapController.camera.zoom; - if (zoom < kCameraMinZoomLevel) { + if (zoom < kNodeMinZoomLevel) { // Show a snackbar-style bubble warning if (context.mounted) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( - content: Text('Cameras not drawn below zoom level $kCameraMinZoomLevel'), + content: Text('Nodes not drawn below zoom level $kNodeMinZoomLevel'), duration: const Duration(seconds: 2), ), ); diff --git a/lib/widgets/map/map_position_manager.dart b/lib/widgets/map/map_position_manager.dart index 1ed5032..2fb7ba6 100644 --- a/lib/widgets/map/map_position_manager.dart +++ b/lib/widgets/map/map_position_manager.dart @@ -3,8 +3,6 @@ import 'package:flutter_map_animations/flutter_map_animations.dart'; import 'package:latlong2/latlong.dart'; import 'package:shared_preferences/shared_preferences.dart'; -import '../../dev_config.dart'; - /// Manages map position persistence and initial positioning. /// Handles saving/loading last map position and moving to initial locations. @@ -27,9 +25,9 @@ class MapPositionManager { Future loadLastMapPosition() async { try { final prefs = await SharedPreferences.getInstance(); - final lat = prefs.getDouble(kLastMapLatKey); - final lng = prefs.getDouble(kLastMapLngKey); - final zoom = prefs.getDouble(kLastMapZoomKey); + final lat = prefs.getDouble('last_map_latitude'); + final lng = prefs.getDouble('last_map_longitude'); + final zoom = prefs.getDouble('last_map_zoom'); if (lat != null && lng != null && _isValidCoordinate(lat) && _isValidCoordinate(lng)) { @@ -80,9 +78,9 @@ class MapPositionManager { } final prefs = await SharedPreferences.getInstance(); - await prefs.setDouble(kLastMapLatKey, location.latitude); - await prefs.setDouble(kLastMapLngKey, location.longitude); - await prefs.setDouble(kLastMapZoomKey, zoom); + await prefs.setDouble('last_map_latitude', location.latitude); + await prefs.setDouble('last_map_longitude', location.longitude); + await prefs.setDouble('last_map_zoom', zoom); debugPrint('[MapPositionManager] Saved last map position: ${location.latitude}, ${location.longitude}, zoom: $zoom'); } catch (e) { debugPrint('[MapPositionManager] Failed to save last map position: $e'); @@ -95,9 +93,9 @@ class MapPositionManager { static Future clearStoredMapPosition() async { try { final prefs = await SharedPreferences.getInstance(); - await prefs.remove(kLastMapLatKey); - await prefs.remove(kLastMapLngKey); - await prefs.remove(kLastMapZoomKey); + await prefs.remove('last_map_latitude'); + await prefs.remove('last_map_longitude'); + await prefs.remove('last_map_zoom'); debugPrint('[MapPositionManager] Cleared stored map position'); } catch (e) { debugPrint('[MapPositionManager] Failed to clear stored map position: $e'); diff --git a/lib/widgets/map_view.dart b/lib/widgets/map_view.dart index d02c532..ddd578a 100644 --- a/lib/widgets/map_view.dart +++ b/lib/widgets/map_view.dart @@ -222,7 +222,7 @@ class MapViewState extends State { if (uploadMode == UploadMode.sandbox) { return kOsmApiMinZoomLevel; } else { - return kCameraMinZoomLevel; + return kNodeMinZoomLevel; } } @@ -370,8 +370,8 @@ class MapViewState extends State { centerMarkers.add( Marker( point: center, - width: kCameraIconDiameter, - height: kCameraIconDiameter, + width: kNodeIconDiameter, + height: kNodeIconDiameter, child: CameraIcon( type: editSession != null ? CameraIconType.editing : CameraIconType.mock, ), @@ -573,7 +573,7 @@ class MapViewState extends State { if (originalCoord != null) { lines.add(Polyline( points: [originalCoord, camera.coord], - color: kCameraRingColorPending, + color: kNodeRingColorPending, strokeWidth: 3.0, )); }