analyticsService top-level property
String
analyticsService
getter/setter pair
Implementation
var analyticsService = """
import 'dart:developer';
import 'package:app_tracking_transparency/app_tracking_transparency.dart';
// import 'package:facebook_app_events/facebook_app_events.dart';
import 'package:firebase_analytics/firebase_analytics.dart';
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
import 'package:flutter/foundation.dart';
class AnalyticsHelper {
static final AnalyticsHelper _instance = AnalyticsHelper._init();
static AnalyticsHelper get instance => _instance;
AnalyticsHelper._init();
void init() {
iosValidation().then((value) {
analytics.logAppOpen();
analytics.setUserId();
});
_initCrashlytics(kReleaseMode);
}
Future<bool> iosValidation() async {
TrackingStatus status = await AppTrackingTransparency.requestTrackingAuthorization();
if (status == TrackingStatus.authorized) {
return true;
} else {
return false;
}
}
final FirebaseAnalytics analytics = FirebaseAnalytics.instance;
// final FacebookAppEvents facebookAppEvents = FacebookAppEvents();
void sendEvent(final String event, {final Map<String, Object?>? extra}) {
analytics.logEvent(name: event, parameters: extra);
// facebookAppEvents.logEvent(name: event, parameters: extra);
log('Event: \$event, extra: \$extra');
}
void _initCrashlytics(bool fatalError) {
// Non-async exceptions
FlutterError.onError = (errorDetails) {
if (_nonFatalErrors.contains(errorDetails.toString())) { // prevent non-fatal errors
return;
}
if (fatalError) {
// If you want to record a "fatal" exception
FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails);
// ignore: dead_code
} else {
// If you want to record a "non-fatal" exception
FirebaseCrashlytics.instance.recordFlutterError(errorDetails);
}
};
// Async exceptions
PlatformDispatcher.instance.onError = (error, stack) {
if (_nonFatalErrors.contains(error.toString())) {
return false;
}
if (fatalError) {
// If you want to record a "fatal" exception
FirebaseCrashlytics.instance.recordError(error, stack, fatal: true);
// ignore: dead_code
} else {
// If you want to record a "non-fatal" exception
FirebaseCrashlytics.instance.recordError(error, stack);
}
return true;
};
}
final List<String> _nonFatalErrors = []; // Add non-fatal errors here
}
""";