@@ -11,11 +11,13 @@ import io.flutter.plugin.common.MethodChannel
1111import io.flutter.plugin.common.MethodChannel.MethodCallHandler
1212import io.flutter.plugin.common.MethodChannel.Result
1313import io.sentry.Breadcrumb
14+ import io.sentry.DateUtils
15+ import io.sentry.Hint
1416import io.sentry.HubAdapter
17+ import io.sentry.Sentry
1518import io.sentry.SentryEvent
1619import io.sentry.SentryLevel
17- import io.sentry.Sentry
18- import io.sentry.DateUtils
20+ import io.sentry.SentryOptions
1921import io.sentry.android.core.ActivityFramesTracker
2022import io.sentry.android.core.AppStartState
2123import io.sentry.android.core.BuildConfig.VERSION_NAME
@@ -26,7 +28,6 @@ import io.sentry.protocol.DebugImage
2628import io.sentry.protocol.SdkVersion
2729import io.sentry.protocol.SentryId
2830import io.sentry.protocol.User
29- import io.sentry.protocol.Geo
3031import java.io.File
3132import java.lang.ref.WeakReference
3233import java.util.Locale
@@ -40,10 +41,6 @@ class SentryFlutterPlugin : FlutterPlugin, MethodCallHandler, ActivityAware {
4041 private var framesTracker: ActivityFramesTracker ? = null
4142 private var autoPerformanceTracingEnabled = false
4243
43- private val flutterSdk = " sentry.dart.flutter"
44- private val androidSdk = " sentry.java.android.flutter"
45- private val nativeSdk = " sentry.native.android.flutter"
46-
4744 override fun onAttachedToEngine (flutterPluginBinding : FlutterPlugin .FlutterPluginBinding ) {
4845 context = flutterPluginBinding.applicationContext
4946 channel = MethodChannel (flutterPluginBinding.binaryMessenger, " sentry_flutter" )
@@ -127,9 +124,15 @@ class SentryFlutterPlugin : FlutterPlugin, MethodCallHandler, ActivityAware {
127124 args.getIfNotNull<String >(" environment" ) { options.environment = it }
128125 args.getIfNotNull<String >(" release" ) { options.release = it }
129126 args.getIfNotNull<String >(" dist" ) { options.dist = it }
130- args.getIfNotNull<Boolean >(" enableAutoSessionTracking" ) { options.isEnableAutoSessionTracking = it }
131- args.getIfNotNull<Long >(" autoSessionTrackingIntervalMillis" ) { options.sessionTrackingIntervalMillis = it }
132- args.getIfNotNull<Long >(" anrTimeoutIntervalMillis" ) { options.anrTimeoutIntervalMillis = it }
127+ args.getIfNotNull<Boolean >(" enableAutoSessionTracking" ) {
128+ options.isEnableAutoSessionTracking = it
129+ }
130+ args.getIfNotNull<Long >(" autoSessionTrackingIntervalMillis" ) {
131+ options.sessionTrackingIntervalMillis = it
132+ }
133+ args.getIfNotNull<Long >(" anrTimeoutIntervalMillis" ) {
134+ options.anrTimeoutIntervalMillis = it
135+ }
133136 args.getIfNotNull<Boolean >(" attachThreads" ) { options.isAttachThreads = it }
134137 args.getIfNotNull<Boolean >(" attachStacktrace" ) { options.isAttachStacktrace = it }
135138 args.getIfNotNull<Boolean >(" enableAutoNativeBreadcrumbs" ) {
@@ -183,12 +186,7 @@ class SentryFlutterPlugin : FlutterPlugin, MethodCallHandler, ActivityAware {
183186 options.sdkVersion = sdkVersion
184187 options.sentryClientName = " $androidSdk /$VERSION_NAME "
185188 options.nativeSdkName = nativeSdk
186-
187- options.setBeforeSend { event, _ ->
188- setEventOriginTag(event)
189- addPackages(event, options.sdkVersion)
190- event
191- }
189+ options.beforeSend = BeforeSendCallbackImpl (options.sdkVersion)
192190
193191 args.getIfNotNull<Int >(" connectionTimeoutMillis" ) { options.connectionTimeoutMillis = it }
194192 args.getIfNotNull<Int >(" readTimeoutMillis" ) { options.readTimeoutMillis = it }
@@ -408,30 +406,50 @@ class SentryFlutterPlugin : FlutterPlugin, MethodCallHandler, ActivityAware {
408406 result.success(" " )
409407 }
410408
411- private fun setEventOriginTag (event : SentryEvent ) {
412- event.sdk?.let {
413- when (it.name) {
414- flutterSdk -> setEventEnvironmentTag(event, " flutter" , " dart" )
415- androidSdk -> setEventEnvironmentTag(event, environment = " java" )
416- nativeSdk -> setEventEnvironmentTag(event, environment = " native" )
417- else -> return
418- }
409+ private class BeforeSendCallbackImpl (
410+ private val sdkVersion : SdkVersion ?
411+ ) : SentryOptions.BeforeSendCallback {
412+ override fun execute (event : SentryEvent , hint : Hint ): SentryEvent {
413+ setEventOriginTag(event)
414+ addPackages(event, sdkVersion)
415+ return event
419416 }
420417 }
421418
422- private fun setEventEnvironmentTag (event : SentryEvent , origin : String = "android", environment : String ) {
423- event.setTag(" event.origin" , origin)
424- event.setTag(" event.environment" , environment)
425- }
426-
427- private fun addPackages (event : SentryEvent , sdk : SdkVersion ? ) {
428- event.sdk?.let {
429- if (it.name == flutterSdk) {
430- sdk?.packageSet?.forEach { sentryPackage ->
431- it.addPackage(sentryPackage.name, sentryPackage.version)
419+ companion object {
420+
421+ private const val flutterSdk = " sentry.dart.flutter"
422+ private const val androidSdk = " sentry.java.android.flutter"
423+ private const val nativeSdk = " sentry.native.android.flutter"
424+ private fun setEventOriginTag (event : SentryEvent ) {
425+ event.sdk?.let {
426+ when (it.name) {
427+ flutterSdk -> setEventEnvironmentTag(event, " flutter" , " dart" )
428+ androidSdk -> setEventEnvironmentTag(event, environment = " java" )
429+ nativeSdk -> setEventEnvironmentTag(event, environment = " native" )
430+ else -> return
432431 }
433- sdk?.integrationSet?.forEach { integration ->
434- it.addIntegration(integration)
432+ }
433+ }
434+
435+ private fun setEventEnvironmentTag (
436+ event : SentryEvent ,
437+ origin : String = "android",
438+ environment : String
439+ ) {
440+ event.setTag(" event.origin" , origin)
441+ event.setTag(" event.environment" , environment)
442+ }
443+
444+ private fun addPackages (event : SentryEvent , sdk : SdkVersion ? ) {
445+ event.sdk?.let {
446+ if (it.name == flutterSdk) {
447+ sdk?.packageSet?.forEach { sentryPackage ->
448+ it.addPackage(sentryPackage.name, sentryPackage.version)
449+ }
450+ sdk?.integrationSet?.forEach { integration ->
451+ it.addIntegration(integration)
452+ }
435453 }
436454 }
437455 }
0 commit comments