rxlabz / sentry-dart

A pure Dart Sentry.io client.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool


Sentry SDK for Dart and Flutter

build

package pub likes popularity pub points
sentry pub package likes popularity pub points
sentry-flutter WIP

Contributing

Dart

All you need is the Dart SDK. The sentry package doesn't depend on the Flutter SDK.

Flutter

The SDK currently supports Android, iOS and Web. We build the example app for these targets in 3 platforms: Windows, macOS and Linux. This is to make sure you'd be able to contribute to this project if you're using any of these operating systems.

We also run CI against the Flutter stable and beta channels so you should be able to build it if you're in one of those.

Dependencies

  • The Dart SDK (if you want to change sentry-dart)
  • The Flutter SDK (if you want to change sentry-dart or sentry-flutter)
  • Android: Android SDK with NDK: The example project includes C++.
  • iOS: You'll need a Mac with xcode installed.
  • Web: No additional dependencies.

Sentry Dart

Versions

Versions 4.0.0 and higher support [Flutter][flutter] (mobile, web, desktop), command-line/server Dart VM, and [AngularDart][angular_sentry].

Versions below 4.0.0 are deprecated.

Usage

Sign up for a Sentry.io account and get a DSN at http://sentry.io.

Add sentry dependency to your pubspec.yaml:

dependencies:
  sentry: ">=4.0.0 <5.0.0"

In your Dart code, import package:sentry/sentry.dart and create a SentryClient using the DSN issued by Sentry.io:

import 'package:sentry/sentry.dart';

final SentryClient sentry = new SentryClient(dsn: YOUR_DSN);

In an exception handler, call captureException():

main() async {
  try {
    doSomethingThatMightThrowAnError();
  } catch(error, stackTrace) {
    await sentry.captureException(
      exception: error,
      stackTrace: stackTrace,
    );
  }
}
Tips for catching errors
  • Use a try/catch block, like in the example above.

  • Create a Zone with an error handler, e.g. using [runZonedGuarded][run_zoned_guarded].

    var sentry = SentryClient(dsn: "https://...");
    // Run the whole app in a zone to capture all uncaught errors.
    runZonedGuarded(
      () => runApp(MyApp()),
      (error, 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');
        }
      },
    );
  • For Flutter-specific errors (such as layout failures), use [FlutterError.onError][flutter_error]. For example:

    var sentry = SentryClient(dsn: "https://...");
    FlutterError.onError = (details, {bool forceReport = false}) {
      try {
        sentry.captureException(
          exception: details.exception,
          stackTrace: details.stack,
        );
      } catch (e) {
        print('Sending report to sentry.io failed: $e');
      } finally {
        // Also use Flutter's pretty error logging to the device's console.
        FlutterError.dumpErrorToConsole(details, forceReport: forceReport);
      }
    };
  • Use Isolate.current.addErrorListener to capture uncaught errors in the root zone.

Resources

  • Documentation
  • Forum
  • Discord
  • Stack Overflow
  • Twitter Follow

About

A pure Dart Sentry.io client.

License:MIT License


Languages

Language:Dart 87.0%Language:Kotlin 3.2%Language:Swift 2.4%Language:Ruby 2.2%Language:Shell 2.1%Language:HTML 1.1%Language:Objective-C 1.0%Language:C++ 0.7%Language:CMake 0.3%