Hive Database Instrumentation for Flutter
Learn more about the Sentry Hive Database Instrumentation for the Flutter SDK.
References to "transactions" on this page apply to the default transaction mode. In stream mode, this integration creates service spans instead, and Sentry sends them as they finish. See Streamed Spans for more information.
This feature is currently in Beta. Beta features are still in progress and may have bugs. We recognize the irony.
(New in version 7.13.1)
Hive is a lightweight and fast key-value database for Flutter and Dart applications. The sentry_hive package provides Hive support for database instrumentation and allows you to track the performance of your queries.
The created spans attach to the active span. In transaction mode, that's the transaction bound to the scope; in stream mode, it's the span started with Sentry.startSpan(). If no span is active, the Hive span won't be sent to Sentry.
Before starting, ensure:
Add the sentry_hive dependency to install the Hive database instrumentation.
pubspec.yamldependencies:
sentry_flutter: ^10.0.0
sentry_hive: ^10.0.0
path_provider: ^2.0.0
dependencies:
sentry_flutter: ^10.0.0
sentry_hive: ^10.0.0
path_provider: ^2.0.0
Use SentryHive to initialize the instance:
import 'package:path_provider/path_provider.dart';
import 'package:sentry_hive/sentry_hive.dart';
final appDir = await getApplicationDocumentsDirectory();
SentryHive.init(appDir.path);
import 'package:path_provider/path_provider.dart';
import 'package:sentry_hive/sentry_hive.dart';
final appDir = await getApplicationDocumentsDirectory();
SentryHive.init(appDir.path);
To use the Transaction Mode tab, set options.traceLifecycle = SentryTraceLifecycle.static during SDK initialization.
import 'package:sentry_hive/sentry_hive.dart';
Future<void> hiveTest() async {
await Sentry.startSpan('hiveTest', (span) async {
final appDir = await getApplicationDocumentsDirectory();
SentryHive.init(appDir.path);
final catsBox = await SentryHive.openBox<Map>('cats');
await catsBox.put('fluffy', {'name': 'Fluffy', 'age': 4});
await catsBox.put('loki', {'name': 'Loki', 'age': 2});
await catsBox.clear();
await catsBox.close();
SentryHive.close();
}, parentSpan: null);
}
import 'package:sentry_hive/sentry_hive.dart';
Future<void> hiveTest() async {
await Sentry.startSpan('hiveTest', (span) async {
final appDir = await getApplicationDocumentsDirectory();
SentryHive.init(appDir.path);
final catsBox = await SentryHive.openBox<Map>('cats');
await catsBox.put('fluffy', {'name': 'Fluffy', 'age': 4});
await catsBox.put('loki', {'name': 'Loki', 'age': 2});
await catsBox.clear();
await catsBox.close();
SentryHive.close();
}, parentSpan: null);
}
import 'package:sentry_hive/sentry_hive.dart';
Future<void> hiveTest() async {
final tr = Sentry.startTransaction(
'hiveTest',
'db',
bindToScope: true,
);
final appDir = await getApplicationDocumentsDirectory();
SentryHive.init(appDir.path);
final catsBox = await SentryHive.openBox<Map>('cats');
await catsBox.put('fluffy', {'name': 'Fluffy', 'age': 4});
await catsBox.put('loki', {'name': 'Loki', 'age': 2});
await catsBox.clear();
await catsBox.close();
SentryHive.close();
await tr.finish(status: const SpanStatus.ok());
}
To view the recorded transaction, log into sentry.io and open your project. Clicking Performance will open a page with transactions, where you can select the just recorded transaction with the name hiveTest.
Database spans identify the database system with db.system.name (flutter_hive) and the database name with db.namespace, when available. Use these keys in queries and span-filtering callbacks.
Database breadcrumbs also use db.system.name and db.namespace.
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").