瀏覽代碼

Add Sentry for crash analytics

Vishnu Mohandas 5 年之前
父節點
當前提交
c96afe7af4
共有 3 個文件被更改,包括 61 次插入1 次删除
  1. 32 1
      lib/main.dart
  2. 28 0
      pubspec.lock
  3. 1 0
      pubspec.yaml

+ 32 - 1
lib/main.dart

@@ -1,3 +1,5 @@
+import 'dart:async';
+
 import 'package:flutter/material.dart';
 import 'package:logger/logger.dart';
 import 'core/configuration.dart';
@@ -5,12 +7,41 @@ import 'photo_loader.dart';
 import 'photo_sync_manager.dart';
 import 'ui/home_widget.dart';
 import 'package:provider/provider.dart';
+import 'package:sentry/sentry.dart';
 
 void main() async {
   WidgetsFlutterBinding.ensureInitialized();
-  runApp(MyApp());
   Configuration.instance.init();
   PhotoSyncManager.instance.sync();
+
+  final SentryClient sentry = new SentryClient(
+      dsn: "http://96780dc0b00f4c69a16c02e90d379996@3.211.17.56/2");
+
+  FlutterError.onError = (FlutterErrorDetails details) async {
+    print('Flutter error caught by Sentry');
+    FlutterError.dumpErrorToConsole(details, forceReport: true);
+    _sendErrorToSentry(sentry, details.exception, details.stack);
+  };
+
+  runZoned(
+    () => runApp(MyApp()),
+    onError: (Object error, StackTrace stackTrace) =>
+        _sendErrorToSentry(sentry, error, stackTrace),
+  );
+}
+
+void _sendErrorToSentry(
+    SentryClient sentry, Object error, StackTrace stackTrace) {
+  try {
+    sentry.captureException(
+      exception: error,
+      stackTrace: stackTrace,
+    );
+    print('Error sent to sentry.io: $error');
+  } catch (e) {
+    print('Sending report to sentry.io failed: $e');
+    print('Original error: $error');
+  }
 }
 
 class MyApp extends StatelessWidget with WidgetsBindingObserver {

+ 28 - 0
pubspec.lock

@@ -142,6 +142,13 @@ packages:
     description: flutter
     source: sdk
     version: "0.0.0"
+  http:
+    dependency: transitive
+    description:
+      name: http
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.12.1"
   http_parser:
     dependency: transitive
     description:
@@ -226,6 +233,13 @@ packages:
       url: "https://pub.dartlang.org"
     source: hosted
     version: "1.0.1"
+  pedantic:
+    dependency: transitive
+    description:
+      name: pedantic
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.9.0"
   petitparser:
     dependency: transitive
     description:
@@ -275,6 +289,13 @@ packages:
       url: "https://pub.dartlang.org"
     source: hosted
     version: "2.0.5"
+  sentry:
+    dependency: "direct main"
+    description:
+      name: sentry
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "3.0.1"
   shared_preferences:
     dependency: "direct main"
     description:
@@ -385,6 +406,13 @@ packages:
       url: "https://pub.dartlang.org"
     source: hosted
     version: "1.1.6"
+  usage:
+    dependency: transitive
+    description:
+      name: usage
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "3.4.1"
   vector_math:
     dependency: transitive
     description:

+ 1 - 0
pubspec.yaml

@@ -41,6 +41,7 @@ dependencies:
   visibility_detector: ^0.1.4
   connectivity: ^0.4.8+2
   event_bus: ^1.1.1
+  sentry: ">=3.0.0 <4.0.0"
 
 dev_dependencies:
   flutter_test: