Sentry's SDK hooks into your runtime environment and automatically reports errors, uncaught exceptions, and unhandled rejections as well as other types of errors depending on the platform.

The most common form of capturing is to capture errors. What can be captured as an error varies by platform. In general, if you have something that looks like an exception, it can be captured. For some SDKs, you can also omit the argument to captureException and Sentry will attempt to capture the current exception. It is also useful for manual reporting of errors or messages to Sentry.

While capturing an event, you can also record the breadcrumbs that lead up to that event. Breadcrumbs are different from events: they will not create an event in Sentry, but will be buffered until the next event is sent. Learn more about breadcrumbs in our Breadcrumbs documentation.

Capturing Errors

In Dart you can capture any exception object that you caught:

import 'package:sentry/sentry.dart';

try {
} catch (exception, stackTrace) {
  await Sentry.captureException(
    stackTrace: stackTrace,

Tips for Catching Errors

  • Use a try/catch block
  • Use a catchError block for Futures
  • Isolate errors on the current Isolate which is the equivalent of a main/UI thread, e.g. using Isolate.current.addErrorListener, are captured automatically (Only for non-Web Apps).
  • Add an Error Listener to your Isolates argument by calling isolate.addSentryErrorListener().
  • Use await when calling Sentry.captureMessage or Sentry.captureException. Alternatively, you can pass the stackTrace parameter via Sentry.captureException(exception, stackTrace: stackTrace) to get the correct stack trace.
  • Flutter-specific errors, such as using FlutterError.onError, are captured automatically
  • The SDK already runs your init callback on an error handler, such as runZonedGuarded on Flutter versions prior to 3.3, or PlatformDispatcher.onError on Flutter versions 3.3 and higher, so that errors are automatically captured.

Capturing Messages

Another common operation is to capture a bare message. A message is textual information that should be sent to Sentry. Typically, our SDKs don't automatically capture messages, but you can capture them manually.

import 'package:sentry/sentry.dart';

await Sentry.captureMessage('Something went wrong');
Help improve this content
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) to suggesting an update ("yeah, this would be better").
Suggest an edit to this page   |  Contribute to Docs   |  

Report a Problem

🎉 Thank you for your feedback! 🙌
Report a problem