Skip to main content
This page describes the advanced configuration options of the Flutter SDK. All configuration is passed through DatadogConfiguration and DatadogRumConfiguration.

Sampling rate

TrackingConsent controls whether data is collected and reported, to meet compliance requirements such as GDPR:

Event filtering and masking

Event mappers run before events are reported; return null to drop the event, or return it after modification. You can use them to mask sensitive fields, remove noise, or rename views.

Distributed tracing

For hosts that match firstPartyHosts, the SDK injects the W3C traceparent to correlate frontend RUM with backend APM. Tracing requires network collection (enableHttpTracking()).

Custom reporting endpoint

For on-premises deployments, override the default reporting endpoint through customEndpoint:
customEndpoint is the final RUM intake URL, not a base origin. It must include /api/v2/rum. If the deployment uses a path prefix, preserve it as well, for example https://example.com/flashduty/api/v2/rum.

WebView tracking

When a Flutter screen embeds a WebView, use flashcat_webview_tracking to correlate Browser RUM events from the WebView with the current native RUM session.
pubspec.yaml
Pass the allowed hostnames to trackDatadogEvents. A hostname matches its subdomains, but wildcards are not supported. The page loaded in the WebView must already use the Flashduty Browser SDK. On Android, you must also enable JavaScriptMode.unrestricted, or correlation will not work.

Symbol file upload

To resolve crash and error stacks back to source locations, you need to upload symbol files. A Flutter application may contain both Dart and native frames:
Dart stacks cannot be symbolicated on iOS yet. The symbol file Flutter produces for Apple targets is a Mach-O, and the platform currently parses only the ELF format used on Android, so an iOS .symbols upload is rejected. iOS native crashes are unaffected — upload dSYMs to symbolicate them.If you ship both iOS and Android, you can still enable --obfuscate: Android Dart stacks resolve normally while iOS Dart stacks stay obfuscated. If readable iOS stacks matter more, leave --obfuscate off for that platform’s build.
Use the FlashCat CLI to upload symbol files:
Symbol files are matched to crash events by the build’s build ID; service and release-version take no part in the lookup. Symbolication therefore still works when they differ from the SDK initialization values — the difference only affects how the file is grouped and filtered in the console’s Source code mapping list. Keeping them aligned is still recommended, and Flutter’s build-number suffix (for example 1.2.3+45) is an easy way for them to drift apart.What must match is the build ID: the app.<platform>-<arch>.symbols file produced by --split-debug-info, the libapp.so inside the APK, and the Build ID column in the console’s Source code mapping → Flutter list must all be identical. Every change to your Dart code produces a new build ID, so symbol upload has to be part of every release build — otherwise that version’s stacks silently degrade to unresolved.

Other configuration