Tracking funkció fejlesztése

This commit is contained in:
2026-06-11 01:20:55 +02:00
parent 2364b2311c
commit 01e6105240
18 changed files with 858 additions and 162 deletions
@@ -37,6 +37,8 @@ class _TrackingTaskHandler extends TaskHandler {
// ─── TrackingController ──────────────────────────────────────────────────────
class TrackingController extends GetxController {
static TrackingController get to => Get.find();
// ── Állapot ────────────────────────────────────────────────────────────────
final isRecording = false.obs;
final isPaused = false.obs;
@@ -60,6 +62,14 @@ class TrackingController extends GetxController {
// ── Mentett track-ek listája ────────────────────────────────────────────────
final savedTracks = <Track>[].obs;
// Melyik track-ek látszanak overlay-ként a térképen
final overlayTrackIds = <int>[].obs;
// Betöltött koordináták cache
final Map<int, List<LatLng>> _trackCoords = {};
int get livePointCount => livePoints.length;
// ── Belső állapot ──────────────────────────────────────────────────────────
LocationSource? _source;
StreamSubscription<SourcePosition>? _positionSub;
@@ -188,6 +198,8 @@ class TrackingController extends GetxController {
final finished = track!.copyWith(
status: TrackStatus.finished,
endTime: DateTime.now(),
distanceMeters: _accumulatedDistance,
pointCount: livePoints.length,
);
await _db.updateTrack(finished);
currentTrack.value = finished;
@@ -209,6 +221,8 @@ class TrackingController extends GetxController {
Future<void> deleteTrack(int id) async {
await _db.deleteTrack(id);
overlayTrackIds.remove(id);
_trackCoords.remove(id);
await loadSavedTracks();
}
@@ -310,4 +324,26 @@ class TrackingController extends GetxController {
}
super.onClose();
}
// Overlay ki/be kapcsolása — ha bekapcsol, betölti a koordinátákat
void toggleTrackOverlay(int trackId) {
if (overlayTrackIds.contains(trackId)) {
overlayTrackIds.remove(trackId);
overlayTrackIds.refresh();
} else {
overlayTrackIds.add(trackId);
overlayTrackIds.refresh();
_loadTrackCoords(trackId);
}
}
/// Koordináták visszaadása — üres lista ha még nincs betöltve
List<LatLng> getCoordsFor(int trackId) => _trackCoords[trackId] ?? [];
Future<void> _loadTrackCoords(int trackId) async {
if (_trackCoords.containsKey(trackId)) return;
final pts = await _db.getLatLons(trackId);
_trackCoords[trackId] = pts.map((p) => LatLng(p.lat, p.lon)).toList();
overlayTrackIds.refresh(); // térkép frissítés
}
}