Firebase analytics és crashlytics használatának beállítása a FirebaseLogger-ben.
This commit is contained in:
@@ -1,10 +1,14 @@
|
||||
import 'dart:async';
|
||||
import 'package:firebase_core/firebase_core.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_foreground_task/flutter_foreground_task.dart';
|
||||
import 'package:geolocator/geolocator.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:latlong2/latlong.dart';
|
||||
import 'package:share_plus/share_plus.dart';
|
||||
import 'package:terepi_seged/services/app_logger.dart';
|
||||
import 'package:terepi_seged/services/firebase_logger.dart';
|
||||
import 'package:terepi_seged/services/project_service.dart';
|
||||
import 'package:terepi_seged/services/track_sync_service.dart';
|
||||
|
||||
@@ -169,11 +173,18 @@ class TrackingController extends GetxController {
|
||||
_positionSub = _source!.positionStream.listen(
|
||||
_onPosition,
|
||||
onError: (e) {
|
||||
Get.snackbar('GPS hiba', e.toString(),
|
||||
backgroundColor: Colors.red, colorText: Colors.white);
|
||||
stopRecording();
|
||||
AppLogger.e('positionStream', 'Stream hiba', error: e);
|
||||
FirebaseLogger.e('positionStream', 'Stream hiba', error: e);
|
||||
if (e is LocationServiceDisabledException ||
|
||||
e is PermissionDeniedException) {
|
||||
Get.snackbar('GPS hiba', e.toString(),
|
||||
backgroundColor: Colors.red, colorText: Colors.white);
|
||||
stopRecording();
|
||||
}
|
||||
},
|
||||
);
|
||||
AppLogger.e('track_started', 'name:$trackName');
|
||||
FirebaseLogger.event('track_started', {'name': trackName});
|
||||
|
||||
// Időmérő
|
||||
_startElapsedTimer();
|
||||
@@ -268,57 +279,75 @@ class TrackingController extends GetxController {
|
||||
// ── Belső logika ───────────────────────────────────────────────────────────
|
||||
|
||||
Future<void> _onPosition(SourcePosition pos) async {
|
||||
if (isPaused.value) return;
|
||||
try {
|
||||
if (isPaused.value) return;
|
||||
final sw = Stopwatch()..start();
|
||||
|
||||
final trackId = currentTrack.value?.id;
|
||||
if (trackId == null) return;
|
||||
final trackId = currentTrack.value?.id;
|
||||
if (trackId == null) return;
|
||||
|
||||
// Távolság a legutóbbi ponttól
|
||||
double segmentDist = 0;
|
||||
if (_lastPoint != null) {
|
||||
segmentDist = haversineMeters(
|
||||
_lastPoint!.latitude,
|
||||
_lastPoint!.longitude,
|
||||
pos.latitude,
|
||||
pos.longitude,
|
||||
// Távolság a legutóbbi ponttól
|
||||
double segmentDist = 0;
|
||||
if (_lastPoint != null) {
|
||||
segmentDist = haversineMeters(
|
||||
_lastPoint!.latitude,
|
||||
_lastPoint!.longitude,
|
||||
pos.latitude,
|
||||
pos.longitude,
|
||||
);
|
||||
// Szűrés: ugrásszerű változás (pl. GPS lock elvesztése) ignorálása
|
||||
if (segmentDist > 100) return;
|
||||
}
|
||||
|
||||
_accumulatedDistance += segmentDist;
|
||||
sessionDistance.value = _accumulatedDistance;
|
||||
|
||||
// Sebesség km/h-ban
|
||||
currentSpeedKmh.value = (pos.speed ?? 0) * 3.6;
|
||||
|
||||
// Pont mentése
|
||||
final point = TrackPoint(
|
||||
trackId: trackId,
|
||||
latitude: pos.latitude,
|
||||
longitude: pos.longitude,
|
||||
altitude: pos.altitude,
|
||||
accuracy: pos.accuracy,
|
||||
speed: pos.speed,
|
||||
heading: pos.heading,
|
||||
timestamp: pos.timestamp,
|
||||
);
|
||||
// Szűrés: ugrásszerű változás (pl. GPS lock elvesztése) ignorálása
|
||||
if (segmentDist > 100) return;
|
||||
}
|
||||
await _db.addPoint(point, _accumulatedDistance);
|
||||
sw.stop();
|
||||
|
||||
_accumulatedDistance += segmentDist;
|
||||
sessionDistance.value = _accumulatedDistance;
|
||||
if (sw.elapsedMilliseconds > 300) {
|
||||
AppLogger.w(
|
||||
'on_Position',
|
||||
'Lassú addPoint: ${sw.elapsedMilliseconds}ms, '
|
||||
'pts: ${livePoints.length}');
|
||||
FirebaseLogger.w(
|
||||
'on_Position',
|
||||
'Lassú addPoint: ${sw.elapsedMilliseconds}ms, '
|
||||
'pts: ${livePoints.length}');
|
||||
}
|
||||
|
||||
// Sebesség km/h-ban
|
||||
currentSpeedKmh.value = (pos.speed ?? 0) * 3.6;
|
||||
TrackSyncService.to.onNewPoint(point);
|
||||
|
||||
// Pont mentése
|
||||
final point = TrackPoint(
|
||||
trackId: trackId,
|
||||
latitude: pos.latitude,
|
||||
longitude: pos.longitude,
|
||||
altitude: pos.altitude,
|
||||
accuracy: pos.accuracy,
|
||||
speed: pos.speed,
|
||||
heading: pos.heading,
|
||||
timestamp: pos.timestamp,
|
||||
);
|
||||
await _db.addPoint(point, _accumulatedDistance);
|
||||
_lastPoint = point;
|
||||
|
||||
TrackSyncService.to.onNewPoint(point);
|
||||
// UI frissítés
|
||||
livePoints.add(LatLng(pos.latitude, pos.longitude));
|
||||
|
||||
_lastPoint = point;
|
||||
|
||||
// UI frissítés
|
||||
livePoints.add(LatLng(pos.latitude, pos.longitude));
|
||||
|
||||
// Értesítés frissítése
|
||||
if (livePoints.length % 10 == 0) {
|
||||
final dist = _formatDistance(_accumulatedDistance);
|
||||
FlutterForegroundTask.updateService(
|
||||
notificationTitle: 'Track rögzítése – $dist',
|
||||
notificationText: elapsedFormatted.value,
|
||||
);
|
||||
// Értesítés frissítése
|
||||
if (livePoints.length % 10 == 0) {
|
||||
final dist = _formatDistance(_accumulatedDistance);
|
||||
FlutterForegroundTask.updateService(
|
||||
notificationTitle: 'Track rögzítése – $dist',
|
||||
notificationText: elapsedFormatted.value,
|
||||
);
|
||||
}
|
||||
} catch (e, stack) {
|
||||
AppLogger.e('_onPosition', 'pont feldolgozási hiba - track folytatódik',
|
||||
error: e, stack: stack);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user