Skip to content
Next Next commit
add sentry widget
  • Loading branch information
buenaflor committed Jan 25, 2024
commit 26d2fca335264d31d0fd27cedab31c285abddbb1
5 changes: 5 additions & 0 deletions flutter/lib/src/sentry_flutter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ typedef FlutterOptionsConfiguration = FutureOr<void> Function(
mixin SentryFlutter {
static const _channel = MethodChannel('sentry_flutter');

@internal
static SentryFlutterOptions flutterOptions = SentryFlutterOptions();

static Future<void> init(
FlutterOptionsConfiguration optionsConfiguration, {
AppRunner? appRunner,
Expand Down Expand Up @@ -96,6 +99,8 @@ mixin SentryFlutter {
// ignore: invalid_use_of_internal_member
SentryNativeProfilerFactory.attachTo(Sentry.currentHub, _native!);
}

SentryFlutter.flutterOptions = flutterOptions;
}

static Future<void> _initDefaultValues(
Expand Down
39 changes: 39 additions & 0 deletions flutter/lib/src/sentry_widget.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import 'package:flutter/cupertino.dart';
import '../sentry_flutter.dart';

/// A central widget that contains the Sentry widgets.
class SentryWidget extends StatefulWidget {
const SentryWidget({super.key, required this.child});

final Widget child;

@override
_SentryWidgetState createState() => _SentryWidgetState();
}

class _SentryWidgetState extends State<SentryWidget> {
final _options = SentryFlutter.flutterOptions;

@override
Widget build(BuildContext context) {
Widget content = widget.child;
content = _maybeWrapScreenshotWidget(content);
content = _maybeWrapUserInteractionWidget(content);
return content;
}

Widget _maybeWrapScreenshotWidget(Widget child) {
if (_options.attachScreenshot) {
return SentryScreenshotWidget(child: child);
}
return child;
}

Widget _maybeWrapUserInteractionWidget(Widget child) {
if (_options.enableUserInteractionTracing ||
_options.enableUserInteractionBreadcrumbs) {
return SentryUserInteractionWidget(child: child);
}
return child;
}
}