From ea43cf17eba8d3cfd7ba4cfeb31ef526760cc15e Mon Sep 17 00:00:00 2001 From: Ded Date: Sun, 8 Feb 2026 18:40:58 -0800 Subject: [PATCH] reduce map marker size (#131) * reduce map marker size reduces map markers from 80 to 60 px to improve visibility with higher density areas * add flutter test to actions * Add GPX export functionality and related UI components * Refactor GPX export constants to use lowercase naming convention and improve export function error handling * ran formating * Enhance GPX export functionality with customizable parameters and improved metadata * Implement PathTraceMapScreen and refactor path tracing functionality across screens * Add localization for missing location error in path tracing * Updated GPX export functionality for contacts and repeaters in multiple languages. * Add scrollbar to path trace details list for improved navigation * Integrate SharePlus plugin for enhanced sharing functionality across platforms * reduce map marker size reduces map markers from 80 to 60 px to improve visibility with higher density areas * reduce marker size to improve map clarity and add path trace navigation to path management --------- Co-authored-by: Winston Lowe --- lib/screens/channel_message_path_screen.dart | 60 ++++++++-------- lib/screens/map_screen.dart | 45 ++++++++++-- lib/screens/path_trace_map.dart | 72 +++++++++++--------- lib/widgets/path_management_dialog.dart | 14 ++++ 4 files changed, 124 insertions(+), 67 deletions(-) diff --git a/lib/screens/channel_message_path_screen.dart b/lib/screens/channel_message_path_screen.dart index 65487d8..8dea475 100644 --- a/lib/screens/channel_message_path_screen.dart +++ b/lib/screens/channel_message_path_screen.dart @@ -500,8 +500,8 @@ class _ChannelMessagePathMapScreenState if (hop.hasLocation) Marker( point: hop.position!, - width: 40, - height: 40, + width: 35, + height: 35, child: Container( decoration: BoxDecoration( color: Colors.green, @@ -526,37 +526,39 @@ class _ChannelMessagePathMapScreenState ), ), ), - Marker( - point: LatLng( - context.read().selfLatitude ?? 0.0, - context.read().selfLongitude ?? 0.0, - ), - width: 40, - height: 40, - child: Container( - decoration: BoxDecoration( - color: Colors.blue, - shape: BoxShape.circle, - border: Border.all(color: Colors.white, width: 2), - boxShadow: [ - BoxShadow( - color: Colors.black.withValues(alpha: 0.3), - blurRadius: 4, - offset: const Offset(0, 2), - ), - ], + if (context.read().selfLatitude != null && + context.read().selfLongitude != null) + Marker( + point: LatLng( + context.read().selfLatitude!, + context.read().selfLongitude!, ), - alignment: Alignment.center, - child: Text( - context.l10n.pathTrace_you, - style: const TextStyle( - color: Colors.white, - fontWeight: FontWeight.bold, - fontSize: 12, + width: 35, + height: 35, + child: Container( + decoration: BoxDecoration( + color: Colors.teal, + shape: BoxShape.circle, + border: Border.all(color: Colors.white, width: 2), + boxShadow: [ + BoxShadow( + color: Colors.black.withValues(alpha: 0.3), + blurRadius: 4, + offset: const Offset(0, 2), + ), + ], + ), + alignment: Alignment.center, + child: Text( + context.l10n.pathTrace_you, + style: const TextStyle( + color: Colors.white, + fontWeight: FontWeight.bold, + fontSize: 12, + ), ), ), ), - ), ]; } diff --git a/lib/screens/map_screen.dart b/lib/screens/map_screen.dart index 0da9960..f522407 100644 --- a/lib/screens/map_screen.dart +++ b/lib/screens/map_screen.dart @@ -349,6 +349,43 @@ class _MapScreenState extends State { ), ..._buildMarkers(contactsWithLocation, settings), ...sharedMarkers.map(_buildSharedMarker), + if (connector.selfLatitude != null && + connector.selfLongitude != null) + Marker( + point: LatLng( + connector.selfLatitude!, + connector.selfLongitude!, + ), + width: 35, + height: 35, + child: Container( + padding: const EdgeInsets.all(4), + decoration: BoxDecoration( + color: Colors.teal, + shape: BoxShape.circle, + border: Border.all( + color: Colors.white, + width: 2, + ), + boxShadow: [ + BoxShadow( + color: Colors.black.withValues(alpha: 0.3), + blurRadius: 4, + offset: const Offset(0, 2), + ), + ], + ), + alignment: Alignment.center, + child: Text( + context.l10n.pathTrace_you, + style: const TextStyle( + color: Colors.black, + fontWeight: FontWeight.bold, + fontSize: 12, + ), + ), + ), + ), ], ), ], @@ -394,14 +431,14 @@ class _MapScreenState extends State { final marker = Marker( point: LatLng(contact.latitude!, contact.longitude!), - width: 80, - height: 80, + width: 35, + height: 35, child: GestureDetector( onTap: () => _showNodeInfo(context, contact), child: Column( children: [ Container( - padding: const EdgeInsets.all(8), + padding: const EdgeInsets.all(4), decoration: BoxDecoration( color: _getNodeColor(contact.type), shape: BoxShape.circle, @@ -417,7 +454,7 @@ class _MapScreenState extends State { child: Icon( _getNodeIcon(contact.type), color: Colors.white, - size: 24, + size: 20, ), ), ], diff --git a/lib/screens/path_trace_map.dart b/lib/screens/path_trace_map.dart index 2e557a5..39de31e 100644 --- a/lib/screens/path_trace_map.dart +++ b/lib/screens/path_trace_map.dart @@ -292,7 +292,7 @@ class _PathTraceMapScreenState extends State { ), ), ), - if (!_hasData && _noLocationErr) + if (!_hasData && !_noLocationErr) Center( child: Column( mainAxisSize: MainAxisSize.min, @@ -364,37 +364,6 @@ class _PathTraceMapScreenState extends State { List _buildHopMarkers(List pathData) { return [ - Marker( - point: LatLng( - context.read().selfLatitude!, - context.read().selfLongitude!, - ), - width: 40, - height: 40, - child: Container( - decoration: BoxDecoration( - color: Colors.blue, - shape: BoxShape.circle, - border: Border.all(color: Colors.white, width: 2), - boxShadow: [ - BoxShadow( - color: Colors.black.withValues(alpha: 0.3), - blurRadius: 4, - offset: const Offset(0, 2), - ), - ], - ), - alignment: Alignment.center, - child: Text( - context.l10n.pathTrace_you, - style: const TextStyle( - color: Colors.white, - fontWeight: FontWeight.bold, - fontSize: 12, - ), - ), - ), - ), for (final hop in pathData) if (_traceData!.pathContacts[hop]!.hasLocation) Marker( @@ -402,9 +371,10 @@ class _PathTraceMapScreenState extends State { _traceData!.pathContacts[hop]!.latitude!, _traceData!.pathContacts[hop]!.longitude!, ), - width: 40, - height: 40, + width: 35, + height: 35, child: Container( + padding: const EdgeInsets.all(4), decoration: BoxDecoration( color: Colors.green, shape: BoxShape.circle, @@ -433,6 +403,40 @@ class _PathTraceMapScreenState extends State { ), ), ), + if (context.read().selfLatitude != null && + context.read().selfLongitude != null) + Marker( + point: LatLng( + context.read().selfLatitude!, + context.read().selfLongitude!, + ), + width: 35, + height: 35, + child: Container( + padding: const EdgeInsets.all(4), + decoration: BoxDecoration( + color: Colors.blue, + shape: BoxShape.circle, + border: Border.all(color: Colors.white, width: 2), + boxShadow: [ + BoxShadow( + color: Colors.black.withValues(alpha: 0.3), + blurRadius: 4, + offset: const Offset(0, 2), + ), + ], + ), + alignment: Alignment.center, + child: Text( + context.l10n.pathTrace_you, + style: const TextStyle( + color: Colors.white, + fontWeight: FontWeight.bold, + fontSize: 12, + ), + ), + ), + ), ]; } diff --git a/lib/widgets/path_management_dialog.dart b/lib/widgets/path_management_dialog.dart index f47b017..483697f 100644 --- a/lib/widgets/path_management_dialog.dart +++ b/lib/widgets/path_management_dialog.dart @@ -1,6 +1,7 @@ import 'dart:typed_data'; import 'package:flutter/material.dart'; +import 'package:meshcore_open/screens/path_trace_map.dart'; import 'package:provider/provider.dart'; import '../connector/meshcore_connector.dart'; @@ -61,6 +62,19 @@ class _PathManagementDialog extends StatelessWidget { title: Text(l10n.chat_fullPath), content: SelectableText(formattedPath), actions: [ + TextButton( + onPressed: () => Navigator.push( + context, + MaterialPageRoute( + builder: (context) => PathTraceMapScreen( + title: context.l10n.contacts_repeaterPathTrace, + path: Uint8List.fromList(pathBytes), + flipPathRound: true, + ), + ), + ), + child: Text(context.l10n.contacts_pathTrace), + ), TextButton( onPressed: () => Navigator.pop(context), child: Text(l10n.common_close),