Location search starts a new mission; shrink and center header bar
Ortssuche verschob bisher nur die Karte - der HTML-Demonstrator beginnt bei einer Suche immer eine neue, nach dem gefundenen Ort benannte Mission (setMissionFromPlace(), aufgerufen aus doSearch()). Vorherige Aenderungen gehen dabei nicht verloren, da flushPendingAutosave() (hier: CurrentMissionMetaNotifier._flushNow()) zuerst noch ausstehende Autosaves schreibt. Die Nominatim-Suche wurde dafuer aus MapSearchControls in einen eigenstaendigen NominatimService extrahiert (analog WindService): injectable http.Client, damit sich die Suche in Tests ohne echten Netzwerkzugriff ueberschreiben laesst. CurrentMissionMetaNotifier bekam dafuer startNewFromPlace() (startNew() intern darauf umgebaut, um Duplikation zu vermeiden). Kopfleiste von 86%/64% (Plan-/Fly-Modus) auf einheitlich 70% Bildschirmbreite verkleinert - zentriert war sie durch Align(topCenter) + FractionallySizedBox bereits strukturell korrekt, wirkte bei der vollen Breite aber unausgewogen. Verifiziert: flutter analyze (0 issues), flutter test (64/64, davon 4 neue NominatimService-Tests und 1 neuer Widget-Test fuer den Missions-Reset bei Ortssuche), manuell auf Pixel_10a-Emulator - Suche nach "Rotterdam" setzt Fusszeile auf "Mission: Rotterdam" mit 0 Wegpunkten trotz zuvor bestehender Mission mit Wegpunkten. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
aaec7f0f72
commit
926d805156
@@ -0,0 +1,7 @@
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
||||
import '../../services/geocoding/nominatim_service.dart';
|
||||
|
||||
final nominatimServiceProvider = Provider<NominatimService>(
|
||||
(ref) => NominatimService(),
|
||||
);
|
||||
@@ -59,12 +59,20 @@ class CurrentMissionMetaNotifier extends Notifier<MissionMeta> {
|
||||
|
||||
/// Analog startNewMission() im HTML-Demonstrator: sichert zuerst noch
|
||||
/// ausstehende Aenderungen der bisherigen Mission, dann leerer Neustart.
|
||||
Future<void> startNew() async {
|
||||
Future<void> startNew() => _startNew(const MissionMeta());
|
||||
|
||||
/// Analog setMissionFromPlace() im HTML-Demonstrator: eine Ortssuche (oder
|
||||
/// GPS-Ortung) beginnt immer eine neue, leere Mission, benannt nach dem
|
||||
/// gefundenen Ort - nicht nur ein Kartensprung.
|
||||
Future<void> startNewFromPlace(String label) =>
|
||||
_startNew(MissionMeta(name: label, placeName: label));
|
||||
|
||||
Future<void> _startNew(MissionMeta newState) async {
|
||||
await _flushNow();
|
||||
_suppressAutosave = true;
|
||||
ref.read(currentMissionProvider.notifier).replaceAll(const []);
|
||||
_suppressAutosave = false;
|
||||
state = const MissionMeta();
|
||||
state = newState;
|
||||
await ref.read(appSettingsRepositoryProvider).setCurrentMissionId(null);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user