| package | build | pub | likes | popularity | pub points |
|---|---|---|---|---|---|
| sentry | |||||
| sentry_flutter |
Versions 3.0.1 and higher support Flutter (mobile, web, desktop),
command-line/server Dart VM, and AngularDart.
Versions below 3.0.1 are deprecated.
Sign up for a Sentry.io account and get a DSN at http://sentry.io.
Add sentry dependency to your pubspec.yaml:
dependencies:
sentry: ">=3.0.1 <4.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,
);
}
}-
Use a
try/catchblock, like in the example above. -
Create a
Zonewith an error handler, e.g. usingrunZonedGuarded.var sentry = SentryClient(dsn: "https://..."); // Run the whole app in a zone to capture all uncaught errors. runZonedGuarded( () => runApp(MyApp()), (error, stackTrace) async { 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. 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.addErrorListenerto capture uncaught errors in the root zone.