Sentry SDK for Dart

package build pub likes popularity pub points
sentry build pub package likes popularity pub points

Pure Dart SDK used by any Dart application like AngularDart, CLI and Server.

Flutter

For Flutter applications there's sentry_flutter which builds on top of this package. That will give you native crash support (for Android and iOS), release health, offline caching and more.

Usage

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

  • Follow the installing instructions on pub.dev.

  • Initialize the Sentry SDK using the DSN issued by Sentry.io:

import 'package:sentry/sentry.dart';

Future<void> main() async {
  await Sentry.init(
    (options) {
      options.dsn = 'https://example@sentry.io/example';
    },
    appRunner: initApp, // Init your App.
  );
}

void initApp() {
  // your app code
}

Or, if you want to run your app in your own error zone runZonedGuarded:

import 'dart:async';

import 'package:sentry/sentry.dart';

Future<void> main() async {
  runZonedGuarded(() async {
    await Sentry.init(
      (options) {
        options.dsn = 'https://example@sentry.io/example';
      },
    );

    // Init your App.
    initApp();
  }, (exception, stackTrace) async {
    await Sentry.captureException(exception, stackTrace: stackTrace);
  });
}

void initApp() {
  // your app code
}

The SentryHttpClient can be used as a standalone client like this:

import 'package:sentry/sentry.dart';

var client = SentryHttpClient();
try {
 var uriResponse = await client.post('https://example.com/whatsit/create',
     body: {'name': 'doodle', 'color': 'blue'});
 print(await client.get(uriResponse.bodyFields['uri']));
} finally {
 client.close();
}

The SentryHttpClient can also be used as a wrapper for your own HTTP Client:

import 'package:sentry/sentry.dart';
import 'package:http/http.dart' as http;

final myClient = http.Client();

var client = SentryHttpClient(client: myClient);
try {
var uriResponse = await client.post('https://example.com/whatsit/create',
     body: {'name': 'doodle', 'color': 'blue'});
 print(await client.get(uriResponse.bodyFields['uri']));
} finally {
 client.close();
}
Tips for catching errors
  • Use a try/catch block.
  • Use a catchError block for Futures, examples on dart.dev.
  • The SDK already runs your callback on an error handler, e.g. using runZonedGuarded, events caught by the runZonedGuarded are captured automatically.
  • Current Isolate errors which is the equivalent of a main or UI thread, are captured automatically (Only for non-Web Apps).
  • For your own Isolates, add an Error Listener and call Sentry.captureException.

Resources

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

Libraries

sentry
A pure Dart client for Sentry.io crash reporting.