import 'package:sentry_flutter/sentry_flutter.dart'; import 'package:workouttest_util/model/cache.dart'; import 'package:workouttest_util/util/logging.dart'; import 'package:workouttest_util/service/tracking_service.dart'; import 'package:workouttest_util/util/enums.dart'; import 'package:workouttest_util/model/tracking.dart' as model; import 'package:firebase_analytics/firebase_analytics.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:posthog_session/posthog_session.dart'; import 'package:matomo_tracker/matomo_tracker.dart'; import 'package:flutter/foundation.dart'; class Track with Logging { static final Track _singleton = Track._internal(); static FirebaseAnalytics analytics = FirebaseAnalytics.instance; factory Track() { return _singleton; } Track._internal(); void track(TrackingEvent event, {String eventValue = ""}) { model.Tracking tracking = model.Tracking(); tracking.customerId = Cache().userLoggedIn == null ? 0 : Cache().userLoggedIn!.customerId!; if (kReleaseMode) { tracking.event = event.enumToString(); if (eventValue.isNotEmpty) { tracking.eventValue = eventValue; } tracking.dateAdd = DateTime.now(); TrackingApi().saveTracking(tracking); FirebaseMessaging.instance.subscribeToTopic(event.enumToString()); analytics.logEvent(name: event.enumToString(), parameters: {"value": eventValue}); if (eventValue.isNotEmpty) { MatomoTracker.instance.trackEvent(eventCategory: "wt", action: event.enumToString(), eventName: eventValue); } else { MatomoTracker.instance.trackEvent(eventCategory: "wt", action: event.enumToString()); } Posthog().capture( eventName: event.enumToString(), properties: { 'eventValue': eventValue, 'customer': tracking.customerId, }, ); } } void trackError(Object e) { if ( kReleaseMode ) { Sentry.captureException(e); } } }