sentry-dart
sentry-dart copied to clipboard
Flutter multiview support
Platform
Flutter Web
Obfuscation
Disabled
Debug Info
Disabled
Doctor
[✓] Flutter (Channel stable, 3.24.0, on macOS 14.4.1 23E224 darwin-arm64)
• Flutter version 3.24.0 on channel stable
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 80c2e84975 (11 days ago), 2024-07-30 23:06:49 +0700
• Engine revision b8800d88be
• Dart version 3.5.0
• DevTools version 2.37.2
Version
8.7.0
Flutter 3.24 introduced multiview support in web: https://docs.flutter.dev/platform-integration/web/embedding-flutter-web#enable-multi-view-mode.
This makes code that uses WidgetsBinding.instance.window
incompatible with this Flutter version when multiview is enabled. Note that window
getter was already marked as deprecated and warning is currently ignored in Sentry codebase:
https://github.com/getsentry/sentry-dart/blob/21562c5f6156761d170bd39e03744de9d3f13cdf/flutter/lib/src/widgets_binding_observer.dart#L41-L42
Steps to Reproduce
- Use Flutter 3.24 and follow Flutter docs to enable multiview support in web
- Setup Sentry
- Run the web app
Reproduction code: https://github.com/p-mazhnik/sentry-dart/tree/multiview-issue/flutter/example (based on flutter/example
package from this repo)
Expected Result
No error, app is launched successfully
Actual Result
App is not loaded, error in console
══╡ EXCEPTION CAUGHT BY FLUTTER FRAMEWORK ╞═════════════════════════════════════════════════════════
js_primitives.dart:28 The following assertion was thrown:
js_primitives.dart:28 Assertion failed: org-dartlang-sdk:///lib/_engine/engine/window.dart:693:5
js_primitives.dart:28 _window != null
js_primitives.dart:28 "Trying to access the implicit FlutterView, but it is not available.\nNote: the implicit FlutterView
js_primitives.dart:28 is not available in multi-view mode."
js_primitives.dart:28
js_primitives.dart:28 When the exception was thrown, this was the stack:
js_primitives.dart:28 dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 296:3 throw_
js_primitives.dart:28 dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 29:3 assertFailed
js_primitives.dart:28 lib/_engine/engine/window.dart 693:13 get window
js_primitives.dart:28 lib/ui/window.dart 171:45 get window
js_primitives.dart:28 packages/flutter/src/foundation/binding.dart 222:46 get window
js_primitives.dart:28 packages/sentry_flutter/src/widgets_binding_observer.dart 42:54 new
js_primitives.dart:28 packages/sentry_flutter/src/integrations/widgets_binding_integration.dart 16:22 call
js_primitives.dart:28 packages/sentry/src/sentry.dart 163:34 _callIntegrations
js_primitives.dart:28 dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54 runBody
js_primitives.dart:28 dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 127:5 _async
js_primitives.dart:28 packages/sentry/src/sentry.dart 160:40 _callIntegrations
js_primitives.dart:28 packages/sentry/src/sentry.dart 139:17 <fn>
js_primitives.dart:28 dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54 runBody
js_primitives.dart:28 dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 127:5 _async
js_primitives.dart:28 packages/sentry/src/sentry.dart 136:43 <fn>
js_primitives.dart:28 packages/sentry/src/run_zoned_guarded_integration.dart 75:24 <fn>
js_primitives.dart:28 dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54 runBody
js_primitives.dart:28 dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 127:5 _async
js_primitives.dart:28 packages/sentry/src/run_zoned_guarded_integration.dart 73:7 <fn>
js_primitives.dart:28 dart-sdk/lib/async/zone.dart 1399:13 _rootRun
js_primitives.dart:28 dart-sdk/lib/async/zone.dart 1301:19 run
js_primitives.dart:28 dart-sdk/lib/async/zone.dart 1825:67 _runZoned
js_primitives.dart:28 dart-sdk/lib/async/zone.dart 1814:12 runZonedGuarded
js_primitives.dart:28 packages/sentry/src/run_zoned_guarded_integration.dart 72:5 call
js_primitives.dart:28 packages/sentry/src/sentry.dart 150:41 _init
js_primitives.dart:28 dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 45:50 <fn>
js_primitives.dart:28 dart-sdk/lib/async/zone.dart 1661:54 runUnary
js_primitives.dart:28 dart-sdk/lib/async/future_impl.dart 163:18 handleValue
js_primitives.dart:28 dart-sdk/lib/async/future_impl.dart 861:44 handleValueCallback
js_primitives.dart:28 dart-sdk/lib/async/future_impl.dart 890:13 _propagateToListeners
js_primitives.dart:28 dart-sdk/lib/async/future_impl.dart 666:5 [_completeWithValue]
js_primitives.dart:28 dart-sdk/lib/async/future_impl.dart 736:7 callback
js_primitives.dart:28 dart-sdk/lib/async/schedule_microtask.dart 40:11 _microtaskLoop
js_primitives.dart:28 dart-sdk/lib/async/schedule_microtask.dart 49:5 _startMicrotaskLoop
js_primitives.dart:28 dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 181:7 <fn>
js_primitives.dart:28 ════════════════════════════════════════════════════════════════════════════════════════════════════
Are you willing to submit a PR?
None