package | build | pub | likes | popularity | pub points |
---|---|---|---|---|---|
sentry_flutter |
This package includes support to native crashes through Sentry's native SDKs: (Android and iOS). It will capture errors in the native layer, including (Java/Kotlin/C/C++ for Android and Objective-C/Swift for iOS).
-
Sign up for a Sentry.io account and get a DSN at https://sentry.io.
-
Follow the installing instructions on pub.dev.
-
Initialize the Sentry SDK using the DSN issued by Sentry.io:
-
The SDK already runs your init
callback
on an error handler, such asrunZonedGuarded
on Flutter versions prior to3.3
, orPlatformDispatcher.onError
on Flutter versions 3.3 and higher, so that errors are automatically captured.
import 'package:flutter/widgets.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
Future<void> main() async {
await SentryFlutter.init(
(options) {
options.dsn = 'https://[email protected]/add-your-dsn-here';
},
// Init your App.
appRunner: () => runApp(MyApp()),
);
}
Prior to Flutter 3.3, if you want to run your app in your own error zone runZonedGuarded:
import 'dart:async';
import 'package:flutter/widgets.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
Future<void> main() async {
runZonedGuarded(() async {
await SentryFlutter.init(
(options) {
options.dsn = 'https://[email protected]/add-your-dsn-here';
},
);
runApp(MyApp());
}, (exception, stackTrace) async {
await Sentry.captureException(exception, stackTrace: stackTrace);
});
}
In order to track navigation events you have to add the
SentryNavigatorObserver
to your MaterialApp
, WidgetsApp
or CupertinoApp
.
You should provide a name to route settings: RouteSettings(name: 'Your Route Name')
. The root
route name /
will be replaced by root "/"
for clarity's sake.
import 'package:flutter/material.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
// ...
MaterialApp(
navigatorObservers: [
SentryNavigatorObserver(),
],
// other parameters
)
// ...
For a more throughout example see the example.
Sentry has support for tracing AssetBundle
s. It can be added with the following code:
runApp(
DefaultAssetBundle(
bundle: SentryAssetBundle(),
child: MyApp(),
),
);
This adds performance tracing for all AssetBundle
usages, where the AssetBundle
is accessed with DefaultAssetBunlde.of(context)
.
This includes all of Flutters internal access of AssetBundle
s, like Image.asset
for example.
Tracing for AssetBundle.loadStructuredData()
is currently disabled.
It's hidden by the enableStructureDataTracing
flag and considered experimental. Using it could lead to bugs. We recognize the irony.
Please see the instructions here.
- Flutter
split-debug-info
andobfuscate
flags aren't supported on iOS yet, but only on Android, if this feature is enabled, Dart stack traces are not human readable - If you enable the
split-debug-info
feature, you must upload the Debug Symbols manually. - Layout related errors are only caught by FlutterError.onError in debug mode. In release mode, they are removed by the Flutter framework. See Flutter build modes.
Debug symbols and Source maps provide information that Sentry displays on the Issue Details page to help you triage an issue. We offer a range of methods to provide Sentry with debug symbols, follow the docs to learn more about it.
Or try out the Alpha version of the Sentry Dart Plugin that does it automatically for you, feedback is welcomed.
- Use a
try/catch
block. - Use a
catchError
block forFutures
, examples on dart.dev. - Flutter-specific errors 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 callSentry.captureException
.