Features
- Windows native error & obfuscation support (#2286, #2426)
- Improve app start measurements by using
addTimingsCallbackinstead ofaddPostFrameCallbackto determine app start end (#2405)- ⚠️ This change may result in reporting of shorter app start durations
- Improve frame tracking accuracy (#2372)
- Introduces
SentryWidgetsFlutterBindingthat tracks a frame starting fromhandleBeginFrameand ending inhandleDrawFrame, this is approximately the buildDuration time - By default,
SentryFlutter.init()automatically initializesSentryWidgetsFlutterBindingthrough theWidgetsFlutterBindingIntegration - If you need to initialize the binding before
SentryFlutter.init, useSentryWidgetsFlutterBinding.ensureInitializedinstead ofWidgetsFlutterBinding.ensureInitialized:
void main() async { // Replace WidgetsFlutterBinding.ensureInitialized() SentryWidgetsFlutterBinding.ensureInitialized(); await SentryFlutter.init(...); runApp(MyApp()); }
- ⚠️ Frame tracking will be disabled if a different binding is used
- Introduces
Enhancements
- Only send debug images referenced in the stacktrace for events (#2329)
- Remove
sentryframes if SDK falls back to current stack trace (#2351)- Flutter doesn't always provide stack traces for unhandled errors - this is normal Flutter behavior
- When no stack trace is provided (in Flutter errors,
captureException, orcaptureMessage):- SDK creates a synthetic trace using
StackTrace.current - Internal SDK frames are removed to reduce noise
- SDK creates a synthetic trace using
- Original stack traces (when provided) are left unchanged
Fixes
- Apply default IP address (
{{auto}}) to transactions (#2395)- Previously, transactions weren't getting the default IP address when user context was loaded
- Now consistently applies default IP address to both events and transactions when:
- No user context exists
- User context exists but IP address is null