import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../domain/waypoint/flat_waypoint_list.dart'; /// Haelt die Wegpunktliste der aktuell in Bearbeitung befindlichen Mission /// (Architektur-Doku 3.2/3.6). Reaktiver Einzelwert im Sinne von 4.16 - /// daher Riverpod statt Bloc; die App-Mode State Machine bleibt in /// AppModeCubit. class CurrentMissionNotifier extends Notifier> { @override List build() => []; void addWaypoint(Waypoint waypoint) { state = [...state, waypoint]; } /// Aktualisiert die Position eines Wegpunkts (Drag-to-Reposition im /// Editier-Modus: Kartenverschieben bewegt den Zielpunkt live mit). void moveWaypoint(int index, double lat, double lon) { state = [ for (var i = 0; i < state.length; i++) if (i == index) state[i].copyWith(lat: lat, lon: lon) else state[i], ]; } /// Aktualisiert die Zielhoehe eines Wegpunkts (Alt-Drehrad im /// Editier-Modus schreibt live in den Zielpunkt). void setAltitude(int index, double altitudeM) { state = [ for (var i = 0; i < state.length; i++) if (i == index) state[i].copyWith(altitudeM: altitudeM) else state[i], ]; } /// Aktualisiert die Zielgeschwindigkeit eines Wegpunkts (Speed-Drehrad im /// Editier-Modus schreibt live in den Zielpunkt). void setSpeed(int index, double speedMs) { state = [ for (var i = 0; i < state.length; i++) if (i == index) state[i].copyWith(speedMs: speedMs) else state[i], ]; } /// Aktualisiert den Fangradius eines Wegpunkts (Wegpunktliste: Catch-Chip). void setCatchRadius(int index, double catchRadiusM) { state = [ for (var i = 0; i < state.length; i++) if (i == index) state[i].copyWith(catchRadiusM: catchRadiusM) else state[i], ]; } /// Schaltet die Execute-Aktion eines Wegpunkts um (Halo-Radialmenue: /// erneutes Antippen derselben Aktion setzt sie zurueck auf "none"). void toggleAction(int index, WaypointAction action) { state = [ for (var i = 0; i < state.length; i++) if (i == index) state[i].copyWith( action: state[i].action == action ? WaypointAction.none : action, ) else state[i], ]; } /// Setzt die Execute-Aktion eines Wegpunkts direkt (Wegpunktliste: /// Execute-Dropdown - im Unterschied zu [toggleAction] kein Umschalten). void setAction(int index, WaypointAction action) { state = [ for (var i = 0; i < state.length; i++) if (i == index) state[i].copyWith(action: action) else state[i], ]; } void removeAt(int index) { state = [ for (var i = 0; i < state.length; i++) if (i != index) state[i], ]; } } final currentMissionProvider = NotifierProvider>( CurrentMissionNotifier.new, );