mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-30 03:19:11 +08:00
Sentry: Add error breadcrumbs
This way we will have some context as to why an error happened.
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
|
||||
import 'package:gitjournal/app.dart';
|
||||
import 'package:gitjournal/error_reporting.dart';
|
||||
import 'package:firebase_analytics/firebase_analytics.dart';
|
||||
|
||||
Analytics getAnalytics() {
|
||||
@ -9,15 +10,18 @@ Analytics getAnalytics() {
|
||||
|
||||
class Analytics {
|
||||
FirebaseAnalytics firebase;
|
||||
bool enabled = false;
|
||||
|
||||
Future<void> logEvent({
|
||||
@required String name,
|
||||
Map<String, dynamic> parameters,
|
||||
}) async {
|
||||
return firebase.logEvent(name: name, parameters: parameters);
|
||||
await firebase.logEvent(name: name, parameters: parameters);
|
||||
captureErrorBreadcrumb(name: name, parameters: parameters);
|
||||
}
|
||||
|
||||
Future<void> setAnalyticsCollectionEnabled(bool enabled) async {
|
||||
this.enabled = enabled;
|
||||
return firebase.setAnalyticsCollectionEnabled(enabled);
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,6 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:device_info/device_info.dart';
|
||||
import 'package:firebase_analytics/firebase_analytics.dart';
|
||||
import 'package:firebase_analytics/observer.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gitjournal/analytics.dart';
|
||||
|
@ -93,15 +93,7 @@ Future<void> initCrashlytics() async {
|
||||
|
||||
Future<void> reportError(Object error, StackTrace stackTrace) async {
|
||||
if (reportCrashes) {
|
||||
try {
|
||||
final sentry = await getSentryClient();
|
||||
sentry.captureException(
|
||||
exception: error,
|
||||
stackTrace: stackTrace,
|
||||
);
|
||||
} catch (e) {
|
||||
print("Failed to report with Sentry: $e");
|
||||
}
|
||||
captureSentryException(error, stackTrace);
|
||||
}
|
||||
|
||||
print("Uncaught Exception: $error");
|
||||
@ -113,15 +105,34 @@ Future<void> logException(Exception e, StackTrace stackTrace) async {
|
||||
return;
|
||||
}
|
||||
|
||||
await captureSentryException(e, stackTrace);
|
||||
return FlutterCrashlytics().logException(e, stackTrace);
|
||||
}
|
||||
|
||||
List<Breadcrumb> breadcrumbs = [];
|
||||
|
||||
void captureErrorBreadcrumb({
|
||||
@required String name,
|
||||
Map<String, dynamic> parameters,
|
||||
}) {
|
||||
var b = Breadcrumb(name, DateTime.now(), data: parameters);
|
||||
breadcrumbs.add(b);
|
||||
}
|
||||
|
||||
Future<void> captureSentryException(
|
||||
Exception exception,
|
||||
StackTrace stackTrace,
|
||||
) async {
|
||||
try {
|
||||
final sentry = await getSentryClient();
|
||||
await sentry.captureException(
|
||||
exception: e,
|
||||
final Event event = Event(
|
||||
exception: exception,
|
||||
stackTrace: stackTrace,
|
||||
breadcrumbs: breadcrumbs,
|
||||
);
|
||||
|
||||
return sentry.capture(event: event);
|
||||
} catch (e) {
|
||||
print("Failed to report with Sentry: $e");
|
||||
}
|
||||
|
||||
return FlutterCrashlytics().logException(e, stackTrace);
|
||||
}
|
||||
|
Reference in New Issue
Block a user