From 77be2b8e6fc47cd326425ab7abcb060564014d8f Mon Sep 17 00:00:00 2001 From: Winston Lowe Date: Tue, 24 Feb 2026 19:01:22 -0800 Subject: [PATCH] Refactor code structure for improved readability and maintainability --- lib/l10n/app_bg.arb | 3 +- lib/l10n/app_de.arb | 3 +- lib/l10n/app_en.arb | 3 +- lib/l10n/app_es.arb | 4 +- lib/l10n/app_fr.arb | 3 +- lib/l10n/app_it.arb | 3 +- lib/l10n/app_localizations.dart | 8 +- lib/l10n/app_localizations_bg.dart | 3 + lib/l10n/app_localizations_de.dart | 4 + lib/l10n/app_localizations_en.dart | 5 +- lib/l10n/app_localizations_es.dart | 3 + lib/l10n/app_localizations_fr.dart | 3 + lib/l10n/app_localizations_it.dart | 4 + lib/l10n/app_localizations_nl.dart | 3 + lib/l10n/app_localizations_pl.dart | 3 + lib/l10n/app_localizations_pt.dart | 3 + lib/l10n/app_localizations_ru.dart | 3 + lib/l10n/app_localizations_sk.dart | 3 + lib/l10n/app_localizations_sl.dart | 3 + lib/l10n/app_localizations_sv.dart | 3 + lib/l10n/app_localizations_uk.dart | 3 + lib/l10n/app_localizations_zh.dart | 3 + lib/l10n/app_nl.arb | 3 +- lib/l10n/app_pl.arb | 3 +- lib/l10n/app_pt.arb | 3 +- lib/l10n/app_ru.arb | 3 +- lib/l10n/app_sk.arb | 3 +- lib/l10n/app_sl.arb | 3 +- lib/l10n/app_sv.arb | 3 +- lib/l10n/app_uk.arb | 3 +- lib/l10n/app_zh.arb | 3 +- lib/screens/map_screen.dart | 134 ++++++++++++++++++++++------- 32 files changed, 187 insertions(+), 50 deletions(-) diff --git a/lib/l10n/app_bg.arb b/lib/l10n/app_bg.arb index d2c5f8b..c0479d1 100644 --- a/lib/l10n/app_bg.arb +++ b/lib/l10n/app_bg.arb @@ -1942,5 +1942,6 @@ "path_routeWeight": "{weight}/{max}", "settings_multiAck": "Мулти-потвърди: {value}", "settings_telemetryModeUpdated": "Режим на телеметрията е обновен", - "map_showOverlaps": "Покриване на ключа на повтаряча" + "map_showOverlaps": "Покриване на ключа на повтаряча", + "map_runTraceWithReturnPath": "Върни се по същия път." } \ No newline at end of file diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index 0b3af08..98ddb93 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -1970,5 +1970,6 @@ "path_routeWeight": "{weight}/{max}", "settings_telemetryModeUpdated": "Telemetriemodus aktualisiert", "settings_multiAck": "Mehrfach-Bestätigungen: {value}", - "map_showOverlaps": "Überlappungen der Repeater-Taste" + "map_showOverlaps": "Überlappungen der Repeater-Taste", + "map_runTraceWithReturnPath": "Auf dem gleichen Pfad zurückkehren." } \ No newline at end of file diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 18d8c2f..d8623d3 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -892,7 +892,8 @@ "map_joinRoom": "Join Room", "map_manageRepeater": "Manage Repeater", "map_tapToAdd": "Tap on nodes to add them to the path.", - "map_runTrace": "Run Path Trace", + "map_runTrace": "Run path trace", + "map_runTraceWithReturnPath": "Return back on the same path.", "map_removeLast": "Remove Last", "map_pathTraceCancelled": "Path trace cancelled.", "mapCache_title": "Offline Map Cache", diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb index 4a49e1b..a65d80f 100644 --- a/lib/l10n/app_es.arb +++ b/lib/l10n/app_es.arb @@ -1969,5 +1969,7 @@ "appSettings_maxMessageRetriesSubtitle": "Número de intentos de reintento antes de marcar un mensaje como fallido.", "path_routeWeight": "{weight}/{max}", "settings_telemetryModeUpdated": "Modo de telemetría actualizado", - "settings_multiAck": "Multi-ACKs: {value}" + "settings_multiAck": "Multi-ACKs: {value}", + "map_showOverlaps": "Superposiciones de tecla repetidora", + "map_runTraceWithReturnPath": "Volver atrás por el mismo camino." } \ No newline at end of file diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index ba929ae..8bb0a46 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -1942,5 +1942,6 @@ "path_routeWeight": "{weight}/{max}", "settings_multiAck": "Multi-ACKs : {value}", "settings_telemetryModeUpdated": "Le mode télémétrie a été mis à jour", - "map_showOverlaps": "Chevauchement de la touche répétitive" + "map_showOverlaps": "Chevauchement de la touche répétitive", + "map_runTraceWithReturnPath": "Revenir sur le même chemin." } \ No newline at end of file diff --git a/lib/l10n/app_it.arb b/lib/l10n/app_it.arb index b4414d6..b168e75 100644 --- a/lib/l10n/app_it.arb +++ b/lib/l10n/app_it.arb @@ -1942,5 +1942,6 @@ "path_routeWeight": "{weight}/{max}", "settings_telemetryModeUpdated": "Modalità telemetria aggiornata", "settings_multiAck": "Multi-ACKs: {value}", - "map_showOverlaps": "Sovrapposizioni della chiave ripetitore" + "map_showOverlaps": "Sovrapposizioni della chiave ripetitore", + "map_runTraceWithReturnPath": "Tornare indietro sullo stesso percorso" } \ No newline at end of file diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart index 7c2488e..ce5833a 100644 --- a/lib/l10n/app_localizations.dart +++ b/lib/l10n/app_localizations.dart @@ -3139,9 +3139,15 @@ abstract class AppLocalizations { /// No description provided for @map_runTrace. /// /// In en, this message translates to: - /// **'Run Path Trace'** + /// **'Run path trace'** String get map_runTrace; + /// No description provided for @map_runTraceWithReturnPath. + /// + /// In en, this message translates to: + /// **'Return back on the same path.'** + String get map_runTraceWithReturnPath; + /// No description provided for @map_removeLast. /// /// In en, this message translates to: diff --git a/lib/l10n/app_localizations_bg.dart b/lib/l10n/app_localizations_bg.dart index 9915d06..53d8ef2 100644 --- a/lib/l10n/app_localizations_bg.dart +++ b/lib/l10n/app_localizations_bg.dart @@ -1736,6 +1736,9 @@ class AppLocalizationsBg extends AppLocalizations { @override String get map_runTrace => 'Изпълни Път на Следване'; + @override + String get map_runTraceWithReturnPath => 'Върни се по същия път.'; + @override String get map_removeLast => 'Премахни Последно'; diff --git a/lib/l10n/app_localizations_de.dart b/lib/l10n/app_localizations_de.dart index 721730b..535eb45 100644 --- a/lib/l10n/app_localizations_de.dart +++ b/lib/l10n/app_localizations_de.dart @@ -1733,6 +1733,10 @@ class AppLocalizationsDe extends AppLocalizations { @override String get map_runTrace => 'Pfadverlauf ausführen'; + @override + String get map_runTraceWithReturnPath => + 'Auf dem gleichen Pfad zurückkehren.'; + @override String get map_removeLast => 'Letztes Entfernen'; diff --git a/lib/l10n/app_localizations_en.dart b/lib/l10n/app_localizations_en.dart index d8b2abe..2fe75ec 100644 --- a/lib/l10n/app_localizations_en.dart +++ b/lib/l10n/app_localizations_en.dart @@ -1699,7 +1699,10 @@ class AppLocalizationsEn extends AppLocalizations { String get map_tapToAdd => 'Tap on nodes to add them to the path.'; @override - String get map_runTrace => 'Run Path Trace'; + String get map_runTrace => 'Run path trace'; + + @override + String get map_runTraceWithReturnPath => 'Return back on the same path.'; @override String get map_removeLast => 'Remove Last'; diff --git a/lib/l10n/app_localizations_es.dart b/lib/l10n/app_localizations_es.dart index e5c2817..70e0a79 100644 --- a/lib/l10n/app_localizations_es.dart +++ b/lib/l10n/app_localizations_es.dart @@ -1731,6 +1731,9 @@ class AppLocalizationsEs extends AppLocalizations { @override String get map_runTrace => 'Ejecutar Rastreo de Ruta'; + @override + String get map_runTraceWithReturnPath => 'Volver atrás por el mismo camino.'; + @override String get map_removeLast => 'Eliminar último'; diff --git a/lib/l10n/app_localizations_fr.dart b/lib/l10n/app_localizations_fr.dart index 3570527..5be46c8 100644 --- a/lib/l10n/app_localizations_fr.dart +++ b/lib/l10n/app_localizations_fr.dart @@ -1742,6 +1742,9 @@ class AppLocalizationsFr extends AppLocalizations { @override String get map_runTrace => 'Exécuter la traçage de chemin'; + @override + String get map_runTraceWithReturnPath => 'Revenir sur le même chemin.'; + @override String get map_removeLast => 'Supprimer le dernier'; diff --git a/lib/l10n/app_localizations_it.dart b/lib/l10n/app_localizations_it.dart index 1bf328d..63b501f 100644 --- a/lib/l10n/app_localizations_it.dart +++ b/lib/l10n/app_localizations_it.dart @@ -1732,6 +1732,10 @@ class AppLocalizationsIt extends AppLocalizations { @override String get map_runTrace => 'Esegui Path Trace'; + @override + String get map_runTraceWithReturnPath => + 'Tornare indietro sullo stesso percorso'; + @override String get map_removeLast => 'Rimuovi ultimo'; diff --git a/lib/l10n/app_localizations_nl.dart b/lib/l10n/app_localizations_nl.dart index 947fd27..adf2392 100644 --- a/lib/l10n/app_localizations_nl.dart +++ b/lib/l10n/app_localizations_nl.dart @@ -1721,6 +1721,9 @@ class AppLocalizationsNl extends AppLocalizations { @override String get map_runTrace => 'Padeshulp traceren'; + @override + String get map_runTraceWithReturnPath => 'Terugkeren op hetzelfde pad.'; + @override String get map_removeLast => 'Verwijder Laatste'; diff --git a/lib/l10n/app_localizations_pl.dart b/lib/l10n/app_localizations_pl.dart index aa408c1..b2e5e7e 100644 --- a/lib/l10n/app_localizations_pl.dart +++ b/lib/l10n/app_localizations_pl.dart @@ -1734,6 +1734,9 @@ class AppLocalizationsPl extends AppLocalizations { @override String get map_runTrace => 'Uruchom ślad ścieżki'; + @override + String get map_runTraceWithReturnPath => 'Wróć z powrotem tą samą ścieżką'; + @override String get map_removeLast => 'Usuń ostatni'; diff --git a/lib/l10n/app_localizations_pt.dart b/lib/l10n/app_localizations_pt.dart index 42e91f9..1bc971a 100644 --- a/lib/l10n/app_localizations_pt.dart +++ b/lib/l10n/app_localizations_pt.dart @@ -1732,6 +1732,9 @@ class AppLocalizationsPt extends AppLocalizations { @override String get map_runTrace => 'Executar Traçado de Caminho'; + @override + String get map_runTraceWithReturnPath => 'Retornar ao mesmo caminho.'; + @override String get map_removeLast => 'Remover Último'; diff --git a/lib/l10n/app_localizations_ru.dart b/lib/l10n/app_localizations_ru.dart index 4cd5e43..f71bff0 100644 --- a/lib/l10n/app_localizations_ru.dart +++ b/lib/l10n/app_localizations_ru.dart @@ -1735,6 +1735,9 @@ class AppLocalizationsRu extends AppLocalizations { @override String get map_runTrace => 'Запустить трассировку пути'; + @override + String get map_runTraceWithReturnPath => 'Вернуться обратно по тому же пути'; + @override String get map_removeLast => 'Удалить последний'; diff --git a/lib/l10n/app_localizations_sk.dart b/lib/l10n/app_localizations_sk.dart index b0c0750..d5d00a0 100644 --- a/lib/l10n/app_localizations_sk.dart +++ b/lib/l10n/app_localizations_sk.dart @@ -1721,6 +1721,9 @@ class AppLocalizationsSk extends AppLocalizations { @override String get map_runTrace => 'Spustiť trasovaním cesty'; + @override + String get map_runTraceWithReturnPath => 'Vráťte sa späť po tej istej ceste.'; + @override String get map_removeLast => 'Odstrániť posledný'; diff --git a/lib/l10n/app_localizations_sl.dart b/lib/l10n/app_localizations_sl.dart index 3651f3c..47066c9 100644 --- a/lib/l10n/app_localizations_sl.dart +++ b/lib/l10n/app_localizations_sl.dart @@ -1716,6 +1716,9 @@ class AppLocalizationsSl extends AppLocalizations { @override String get map_runTrace => 'Zaženi sledenje poti'; + @override + String get map_runTraceWithReturnPath => 'Vrni se nazaj po isti poti.'; + @override String get map_removeLast => 'Odstrani Zadnji'; diff --git a/lib/l10n/app_localizations_sv.dart b/lib/l10n/app_localizations_sv.dart index e3c7c7d..6e5fd20 100644 --- a/lib/l10n/app_localizations_sv.dart +++ b/lib/l10n/app_localizations_sv.dart @@ -1710,6 +1710,9 @@ class AppLocalizationsSv extends AppLocalizations { @override String get map_runTrace => 'Kör spårsökning'; + @override + String get map_runTraceWithReturnPath => 'Gå tillbaka på samma väg'; + @override String get map_removeLast => 'Ta bort sista'; diff --git a/lib/l10n/app_localizations_uk.dart b/lib/l10n/app_localizations_uk.dart index f56455a..c068ed3 100644 --- a/lib/l10n/app_localizations_uk.dart +++ b/lib/l10n/app_localizations_uk.dart @@ -1730,6 +1730,9 @@ class AppLocalizationsUk extends AppLocalizations { @override String get map_runTrace => 'Виконати трасування шляху'; + @override + String get map_runTraceWithReturnPath => 'Повернутися назад тим же шляхом'; + @override String get map_removeLast => 'Видалити останній'; diff --git a/lib/l10n/app_localizations_zh.dart b/lib/l10n/app_localizations_zh.dart index 54b86a3..78e9c94 100644 --- a/lib/l10n/app_localizations_zh.dart +++ b/lib/l10n/app_localizations_zh.dart @@ -1627,6 +1627,9 @@ class AppLocalizationsZh extends AppLocalizations { @override String get map_runTrace => '运行路径追踪'; + @override + String get map_runTraceWithReturnPath => '沿着相同的路径返回'; + @override String get map_removeLast => '移除最后一个'; diff --git a/lib/l10n/app_nl.arb b/lib/l10n/app_nl.arb index 9bf6283..43c08b1 100644 --- a/lib/l10n/app_nl.arb +++ b/lib/l10n/app_nl.arb @@ -1942,5 +1942,6 @@ "path_routeWeight": "{weight}/{max}", "settings_telemetryModeUpdated": "Telemetrie-modus bijgewerkt", "settings_multiAck": "Multi-ACKs: {value}", - "map_showOverlaps": "Herhalingssleutel overlapt" + "map_showOverlaps": "Herhalingssleutel overlapt", + "map_runTraceWithReturnPath": "Terugkeren op hetzelfde pad." } \ No newline at end of file diff --git a/lib/l10n/app_pl.arb b/lib/l10n/app_pl.arb index 9f7e7fd..1c08c8a 100644 --- a/lib/l10n/app_pl.arb +++ b/lib/l10n/app_pl.arb @@ -1942,5 +1942,6 @@ "path_routeWeight": "{weight}/{max}", "settings_telemetryModeUpdated": "Tryb telemetryczny zaktualizowany", "settings_multiAck": "Wiele potwierdzeń: {value}", - "map_showOverlaps": "Nakładające się klucze powtarzalne" + "map_showOverlaps": "Nakładające się klucze powtarzalne", + "map_runTraceWithReturnPath": "Wróć z powrotem tą samą ścieżką" } \ No newline at end of file diff --git a/lib/l10n/app_pt.arb b/lib/l10n/app_pt.arb index 2ac9b9d..1ee4130 100644 --- a/lib/l10n/app_pt.arb +++ b/lib/l10n/app_pt.arb @@ -1942,5 +1942,6 @@ "path_routeWeight": "{weight}/{max}", "settings_telemetryModeUpdated": "Modo de telemetria atualizado", "settings_multiAck": "Multi-ACKs: {value}", - "map_showOverlaps": "Sobreposições da Chave Repeater" + "map_showOverlaps": "Sobreposições da Chave Repeater", + "map_runTraceWithReturnPath": "Retornar ao mesmo caminho." } \ No newline at end of file diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index 9d45622..ab32362 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -1182,5 +1182,6 @@ "path_routeWeight": "{weight}/{max}", "settings_telemetryModeUpdated": "Режим телеметрии обновлен", "settings_multiAck": "Мульти-ACK: {value}", - "map_showOverlaps": "Перекрытия ключа повтора" + "map_showOverlaps": "Перекрытия ключа повтора", + "map_runTraceWithReturnPath": "Вернуться обратно по тому же пути" } \ No newline at end of file diff --git a/lib/l10n/app_sk.arb b/lib/l10n/app_sk.arb index 1a79f85..12c2f9a 100644 --- a/lib/l10n/app_sk.arb +++ b/lib/l10n/app_sk.arb @@ -1942,5 +1942,6 @@ "path_routeWeight": "{weight}/{max}", "settings_telemetryModeUpdated": "Režim telemetrie bol aktualizovaný", "settings_multiAck": "Viaceré ACK: {value}", - "map_showOverlaps": "Prekrývanie opakovača kľúča" + "map_showOverlaps": "Prekrývanie opakovača kľúča", + "map_runTraceWithReturnPath": "Vráťte sa späť po tej istej ceste." } \ No newline at end of file diff --git a/lib/l10n/app_sl.arb b/lib/l10n/app_sl.arb index c09e2ec..54ea1f5 100644 --- a/lib/l10n/app_sl.arb +++ b/lib/l10n/app_sl.arb @@ -1942,5 +1942,6 @@ "path_routeWeight": "{weight}/{max}", "settings_multiAck": "Večkratni potrditvi: {value}", "settings_telemetryModeUpdated": "Način telemetrije posodobljen", - "map_showOverlaps": "Prekrivanje ključa ponovnega predvajanja" + "map_showOverlaps": "Prekrivanje ključa ponovnega predvajanja", + "map_runTraceWithReturnPath": "Vrni se nazaj po isti poti." } \ No newline at end of file diff --git a/lib/l10n/app_sv.arb b/lib/l10n/app_sv.arb index 11a8631..1bb0c8a 100644 --- a/lib/l10n/app_sv.arb +++ b/lib/l10n/app_sv.arb @@ -1942,5 +1942,6 @@ "path_routeWeight": "{weight}/{max}", "settings_telemetryModeUpdated": "Telemetri-läge uppdaterat", "settings_multiAck": "Multi-ACKs: {value}", - "map_showOverlaps": "Repeater-nyckelöverlappningar" + "map_showOverlaps": "Repeater-nyckelöverlappningar", + "map_runTraceWithReturnPath": "Gå tillbaka på samma väg" } \ No newline at end of file diff --git a/lib/l10n/app_uk.arb b/lib/l10n/app_uk.arb index c381c8c..e55a582 100644 --- a/lib/l10n/app_uk.arb +++ b/lib/l10n/app_uk.arb @@ -1942,5 +1942,6 @@ "path_routeWeight": "{weight}/{max}", "settings_telemetryModeUpdated": "Режим телеметрії оновлено", "settings_multiAck": "Багатократне підтвердження: {value}", - "map_showOverlaps": "Перекриття ключа повторювача" + "map_showOverlaps": "Перекриття ключа повторювача", + "map_runTraceWithReturnPath": "Повернутися назад тим же шляхом" } \ No newline at end of file diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb index b0e7c61..b415904 100644 --- a/lib/l10n/app_zh.arb +++ b/lib/l10n/app_zh.arb @@ -1947,5 +1947,6 @@ "path_routeWeight": "{weight}/{max}", "settings_multiAck": "多重ACK:{value}", "settings_telemetryModeUpdated": "遥测模式已更新", - "map_showOverlaps": "重复键重叠" + "map_showOverlaps": "重复键重叠", + "map_runTraceWithReturnPath": "沿着相同的路径返回" } \ No newline at end of file diff --git a/lib/screens/map_screen.dart b/lib/screens/map_screen.dart index e7558c5..f5efd3b 100644 --- a/lib/screens/map_screen.dart +++ b/lib/screens/map_screen.dart @@ -480,10 +480,12 @@ class _MapScreenState extends State { point: highlightPosition, width: 40, height: 40, - child: Icon( - Icons.location_on_outlined, - color: Colors.red[600], - size: 34, + child: IgnorePointer( + child: Icon( + Icons.location_on_outlined, + color: Colors.red[600], + size: 34, + ), ), ), if (!_isBuildingPathTrace) @@ -506,28 +508,33 @@ class _MapScreenState extends State { ), width: 40, height: 40, - 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), + child: IgnorePointer( + ignoring: true, + child: Container( + padding: const EdgeInsets.all(4), + decoration: BoxDecoration( + color: Colors.teal, + shape: BoxShape.circle, + border: Border.all( + color: Colors.white, + width: 2, ), - ], - ), - alignment: Alignment.center, - child: const Icon( - Icons.person_pin_circle, - color: Colors.white, - size: 20, + boxShadow: [ + BoxShadow( + color: Colors.black.withValues( + alpha: 0.3, + ), + blurRadius: 4, + offset: const Offset(0, 2), + ), + ], + ), + alignment: Alignment.center, + child: const Icon( + Icons.person_pin_circle, + color: Colors.white, + size: 20, + ), ), ), ), @@ -547,6 +554,7 @@ class _MapScreenState extends State { ), if (!_isBuildingPathTrace) _buildLegend( + contacts, contactsWithLocation, settings, sharedMarkers.length, @@ -832,13 +840,16 @@ class _MapScreenState extends State { List _filterContactsBySettings( List contacts, - dynamic settings, - ) { + dynamic settings, { + bool noLocations = false, + }) { List filtered = []; bool addContact = false; for (final contact in contacts) { addContact = false; - if (!contact.hasLocation) continue; + if (!contact.hasLocation && !noLocations) { + continue; + } // Apply node type filters if (contact.type == advTypeRepeater && @@ -1012,17 +1023,25 @@ class _MapScreenState extends State { } Widget _buildLegend( + List contacts, List contactsWithLocation, settings, int markerCount, int guessedCount, ) { final filteredContacts = _filterContactsBySettings( - contactsWithLocation, + contacts, settings, + noLocations: false, + ); + final filteredContactsAll = _filterContactsBySettings( + contacts, + settings, + noLocations: true, ); final nodeCount = filteredContacts.length; + final nodeCountAll = filteredContactsAll.length; return Positioned( top: 16, @@ -1058,6 +1077,54 @@ class _MapScreenState extends State { fontSize: 14, ), ), + Row( + children: [ + Icon( + Icons.location_on, + size: 16, + color: Colors.grey, + ), + Text( + ": $nodeCount", + style: const TextStyle( + fontWeight: FontWeight.bold, + fontSize: 14, + ), + ), + ], + ), + Row( + children: [ + const Icon( + Icons.wrong_location, + size: 16, + color: Colors.grey, + ), + Text( + ": ${nodeCountAll - nodeCount}", + style: const TextStyle( + fontWeight: FontWeight.bold, + fontSize: 14, + ), + ), + ], + ), + Row( + children: [ + const Icon( + Icons.add_outlined, + size: 16, + color: Colors.grey, + ), + Text( + ": $nodeCountAll", + style: const TextStyle( + fontWeight: FontWeight.bold, + fontSize: 14, + ), + ), + ], + ), Text( context.l10n.map_pinsCount(markerCount), style: const TextStyle( @@ -2137,7 +2204,7 @@ class _MapScreenState extends State { _isBuildingPathTrace = false; }); }, - tooltip: "Path Trace", + tooltip: l10n.map_runTrace, icon: const Icon(Icons.arrow_forward_outlined), ), if (_pathTrace.isNotEmpty) @@ -2157,14 +2224,14 @@ class _MapScreenState extends State { _isBuildingPathTrace = false; }); }, - tooltip: "Build Return Path", + tooltip: l10n.map_runTraceWithReturnPath, icon: const Icon(Icons.replay), ), if (_pathTrace.isNotEmpty) IconButton( onPressed: _removePath, - tooltip: "Remove Last Point", - icon: const Icon(Icons.delete), + tooltip: l10n.map_removeLast, + icon: const Icon(Icons.undo), ), if (_pathTrace.isEmpty) IconButton( @@ -2179,6 +2246,7 @@ class _MapScreenState extends State { SnackBar(content: Text(l10n.map_pathTraceCancelled)), ); }, + tooltip: l10n.common_cancel, icon: const Icon(Icons.close), ), ],