Firebase analytics és crashlytics használatának beállítása a FirebaseLogger-ben.

This commit is contained in:
2026-06-24 11:24:19 +02:00
parent ccf62aafce
commit e126f340c6
5 changed files with 294 additions and 50 deletions
@@ -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);
}
}