From d3b29894353540d13594b256c498193b6b373875 Mon Sep 17 00:00:00 2001 From: Jonas Uekoetter Date: Thu, 20 Feb 2025 17:46:32 +0100 Subject: [PATCH 01/12] Add Flutter runtime --- .../enricher/flutter_runtime.dart | 69 +++++++++++++++++++ .../enricher/io_enricher_event_processor.dart | 6 +- .../web_enricher_event_processor.dart | 19 +++++ 3 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 dart/lib/src/event_processor/enricher/flutter_runtime.dart diff --git a/dart/lib/src/event_processor/enricher/flutter_runtime.dart b/dart/lib/src/event_processor/enricher/flutter_runtime.dart new file mode 100644 index 0000000000..b180b230d3 --- /dev/null +++ b/dart/lib/src/event_processor/enricher/flutter_runtime.dart @@ -0,0 +1,69 @@ +import '../../protocol/sentry_runtime.dart'; + +SentryRuntime? get flutterRuntime { + if (FlutterVersion.version == null || + FlutterVersion.channel == null || + FlutterVersion.frameworkRevision == null) { + return null; + } + + return SentryRuntime( + name: 'Flutter', + version: '${FlutterVersion.version} (${FlutterVersion.channel})', + build: FlutterVersion.frameworkRevision, + ); +} + +SentryRuntime? get dartFlutterRuntime { + if (FlutterVersion.dartVersion == null) { + return null; + } + + return SentryRuntime( + name: 'Dart', + version: FlutterVersion.dartVersion, + ); +} + +/// Details about the Flutter version this app was compiled with, +/// corresponding to the output of `flutter --version`. +/// +/// When this Flutter version was build from a fork, or when Flutter runs in a +/// custom embedder, these values might be unreliable. +abstract class FlutterVersion { + const FlutterVersion._(); + + /// The Flutter version used to compile the app. + static const String? version = bool.hasEnvironment('FLUTTER_VERSION') + ? String.fromEnvironment('FLUTTER_VERSION') + : null; + + /// The Flutter channel used to compile the app. + static const String? channel = bool.hasEnvironment('FLUTTER_CHANNEL') + ? String.fromEnvironment('FLUTTER_CHANNEL') + : null; + + /// The URL of the Git repository from which Flutter was obtained. + static const String? gitUrl = bool.hasEnvironment('FLUTTER_GIT_URL') + ? String.fromEnvironment('FLUTTER_GIT_URL') + : null; + + /// The Flutter framework revision, as a (short) Git commit ID. + static const String? frameworkRevision = + bool.hasEnvironment('FLUTTER_FRAMEWORK_REVISION') + ? String.fromEnvironment('FLUTTER_FRAMEWORK_REVISION') + : null; + + /// The Flutter engine revision. + static const String? engineRevision = + bool.hasEnvironment('FLUTTER_ENGINE_REVISION') + ? String.fromEnvironment('FLUTTER_ENGINE_REVISION') + : null; + + // This is included since [Platform.version](https://api.dart.dev/stable/dart-io/Platform/version.html) + // is not included on web platforms. + /// The Dart version used to compile the app. + static const String? dartVersion = bool.hasEnvironment('FLUTTER_DART_VERSION') + ? String.fromEnvironment('FLUTTER_DART_VERSION') + : null; +} diff --git a/dart/lib/src/event_processor/enricher/io_enricher_event_processor.dart b/dart/lib/src/event_processor/enricher/io_enricher_event_processor.dart index 355eac6a44..50a676b25d 100644 --- a/dart/lib/src/event_processor/enricher/io_enricher_event_processor.dart +++ b/dart/lib/src/event_processor/enricher/io_enricher_event_processor.dart @@ -4,6 +4,7 @@ import 'package:meta/meta.dart'; import '../../../sentry.dart'; import 'enricher_event_processor.dart'; +import 'flutter_runtime.dart'; import 'io_platform_memory.dart'; EnricherEventProcessor enricherEventProcessor(SentryOptions options) { @@ -63,12 +64,15 @@ class IoEnricherEventProcessor implements EnricherEventProcessor { version: _dartVersion, rawDescription: Platform.version, ); + final flRuntime = flutterRuntime; + if (runtimes == null) { - return [dartRuntime]; + return [dartRuntime, if (flRuntime != null) flRuntime]; } return [ ...runtimes, dartRuntime, + if (flRuntime != null) flRuntime, ]; } diff --git a/dart/lib/src/event_processor/enricher/web_enricher_event_processor.dart b/dart/lib/src/event_processor/enricher/web_enricher_event_processor.dart index 27bb6b99db..07b7dcd0dd 100644 --- a/dart/lib/src/event_processor/enricher/web_enricher_event_processor.dart +++ b/dart/lib/src/event_processor/enricher/web_enricher_event_processor.dart @@ -4,6 +4,7 @@ import 'package:web/web.dart' as web show window, Window, Navigator; import '../../../sentry.dart'; import 'enricher_event_processor.dart'; +import 'flutter_runtime.dart'; EnricherEventProcessor enricherEventProcessor(SentryOptions options) { return WebEnricherEventProcessor( @@ -29,6 +30,7 @@ class WebEnricherEventProcessor implements EnricherEventProcessor { final contexts = event.contexts.copyWith( device: _getDevice(event.contexts.device), culture: _getSentryCulture(event.contexts.culture), + runtimes: _getRuntimes(event.contexts.runtimes), ); contexts['dart_context'] = _getDartContext(); @@ -100,6 +102,23 @@ class WebEnricherEventProcessor implements EnricherEventProcessor { timezone: culture?.timezone ?? DateTime.now().timeZoneName, ); } + + List _getRuntimes(List? runtimes) { + final flRuntime = flutterRuntime; + final dartFlRuntime = dartFlutterRuntime; + + if (runtimes == null) { + return [ + if (flRuntime != null) flRuntime, + if (dartFlRuntime != null) dartFlRuntime, + ]; + } + return [ + ...runtimes, + if (flRuntime != null) flRuntime, + if (dartFlRuntime != null) dartFlRuntime, + ]; + } } extension on web.Navigator { From 1fa65d3f97d36e33ed824e6afeeba130411e66f1 Mon Sep 17 00:00:00 2001 From: Jonas Uekoetter Date: Thu, 20 Feb 2025 17:49:31 +0100 Subject: [PATCH 02/12] add explaining comment --- .../lib/src/event_processor/enricher/flutter_runtime.dart | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/dart/lib/src/event_processor/enricher/flutter_runtime.dart b/dart/lib/src/event_processor/enricher/flutter_runtime.dart index b180b230d3..ddf401af7f 100644 --- a/dart/lib/src/event_processor/enricher/flutter_runtime.dart +++ b/dart/lib/src/event_processor/enricher/flutter_runtime.dart @@ -1,5 +1,13 @@ import '../../protocol/sentry_runtime.dart'; +// The Flutter version information can be fetched via Dart defines, +// see https://github.com/flutter/flutter/pull/140783. +// This code lives in the Dart only Sentry code, since the code +// doesn't require any Flutter dependency. +// Additionally, this makes it work on background isolates in +// Flutter, where one may not initialize the whole Flutter Sentry +// SDK. + SentryRuntime? get flutterRuntime { if (FlutterVersion.version == null || FlutterVersion.channel == null || From 65496d46bf23a8db299e8f56e55bbe886537c944 Mon Sep 17 00:00:00 2001 From: Jonas Uekoetter Date: Thu, 20 Feb 2025 18:12:14 +0100 Subject: [PATCH 03/12] add changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b6d3b2980..53d490de60 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,8 @@ - Use `loadDebugImagesForAddresses` API for Android ([#2706](https://github.com/getsentry/sentry-dart/pull/2706)) - This reduces the envelope size and data transferred across method channels - If debug images received by `loadDebugImagesForAddresses` are empty, the SDK loads all debug images as fallback +- Add Flutter runtime information ([#2742](https://github.com/getsentry/sentry-dart/pull/2742)) + - This will start working as soon as [this code](https://github.com/flutter/flutter/pull/140783) is available on the Flutter master, beta or stable channel. ### Fixes From ce305a199c0a8fcdb7db3cf8c1ae48bf6394aa56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Uek=C3=B6tter?= Date: Thu, 20 Feb 2025 19:20:52 +0100 Subject: [PATCH 04/12] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 53d490de60..7c8149db82 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,7 +17,7 @@ - This reduces the envelope size and data transferred across method channels - If debug images received by `loadDebugImagesForAddresses` are empty, the SDK loads all debug images as fallback - Add Flutter runtime information ([#2742](https://github.com/getsentry/sentry-dart/pull/2742)) - - This will start working as soon as [this code](https://github.com/flutter/flutter/pull/140783) is available on the Flutter master, beta or stable channel. + - This works if the version of Flutter you're using includes [this code](https://github.com/flutter/flutter/pull/140783). ### Fixes From c8b479372983d7d9254f878c0bdc215dec398f35 Mon Sep 17 00:00:00 2001 From: Jonas Uekoetter Date: Tue, 25 Feb 2025 06:12:17 +0100 Subject: [PATCH 05/12] make things const --- .../enricher/flutter_runtime.dart | 42 +++++++++---------- 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/dart/lib/src/event_processor/enricher/flutter_runtime.dart b/dart/lib/src/event_processor/enricher/flutter_runtime.dart index ddf401af7f..6fd8d5630c 100644 --- a/dart/lib/src/event_processor/enricher/flutter_runtime.dart +++ b/dart/lib/src/event_processor/enricher/flutter_runtime.dart @@ -1,37 +1,33 @@ import '../../protocol/sentry_runtime.dart'; // The Flutter version information can be fetched via Dart defines, -// see https://github.com/flutter/flutter/pull/140783. +// see +// - https://github.com/flutter/flutter/pull/140783 +// - https://github.com/flutter/flutter/pull/163761 // This code lives in the Dart only Sentry code, since the code // doesn't require any Flutter dependency. // Additionally, this makes it work on background isolates in // Flutter, where one may not initialize the whole Flutter Sentry // SDK. -SentryRuntime? get flutterRuntime { - if (FlutterVersion.version == null || - FlutterVersion.channel == null || - FlutterVersion.frameworkRevision == null) { - return null; - } +const _hasFlutterRuntimeInformation = FlutterVersion.version == null || + FlutterVersion.channel == null || + FlutterVersion.frameworkRevision == null; - return SentryRuntime( - name: 'Flutter', - version: '${FlutterVersion.version} (${FlutterVersion.channel})', - build: FlutterVersion.frameworkRevision, - ); -} - -SentryRuntime? get dartFlutterRuntime { - if (FlutterVersion.dartVersion == null) { - return null; - } +const SentryRuntime? flutterRuntime = _hasFlutterRuntimeInformation + ? null + : SentryRuntime( + name: 'Flutter', + version: '${FlutterVersion.version} (${FlutterVersion.channel})', + build: FlutterVersion.frameworkRevision, + ); - return SentryRuntime( - name: 'Dart', - version: FlutterVersion.dartVersion, - ); -} +const SentryRuntime? dartFlutterRuntime = FlutterVersion.dartVersion == null + ? null + : SentryRuntime( + name: 'Dart', + version: FlutterVersion.dartVersion, + ); /// Details about the Flutter version this app was compiled with, /// corresponding to the output of `flutter --version`. From 0fa7d7beb2652f20c7be2018be9e47da0d4f118e Mon Sep 17 00:00:00 2001 From: Jonas Uekoetter Date: Tue, 25 Feb 2025 06:15:44 +0100 Subject: [PATCH 06/12] fix changelog --- CHANGELOG.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3956511bba..b67d8fb547 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## Unreleased + +### Enhancements + +- Add Flutter runtime information ([#2742](https://github.com/getsentry/sentry-dart/pull/2742)) + - This works if the version of Flutter you're using includes [this code](https://github.com/flutter/flutter/pull/163761). + ## 8.14.0-beta.1 ### Behavioral changes @@ -18,8 +25,6 @@ - Use `loadDebugImagesForAddresses` API for Android ([#2706](https://github.com/getsentry/sentry-dart/pull/2706)) - This reduces the envelope size and data transferred across method channels - If debug images received by `loadDebugImagesForAddresses` are empty, the SDK loads all debug images as fallback -- Add Flutter runtime information ([#2742](https://github.com/getsentry/sentry-dart/pull/2742)) - - This works if the version of Flutter you're using includes [this code](https://github.com/flutter/flutter/pull/140783). ### Fixes From feecc70a93ac5c65fe29cd2a8158376f2334de75 Mon Sep 17 00:00:00 2001 From: Jonas Uekoetter Date: Tue, 25 Feb 2025 06:18:11 +0100 Subject: [PATCH 07/12] more doc comments --- dart/lib/src/event_processor/enricher/flutter_runtime.dart | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/dart/lib/src/event_processor/enricher/flutter_runtime.dart b/dart/lib/src/event_processor/enricher/flutter_runtime.dart index 6fd8d5630c..8f0c97304a 100644 --- a/dart/lib/src/event_processor/enricher/flutter_runtime.dart +++ b/dart/lib/src/event_processor/enricher/flutter_runtime.dart @@ -4,11 +4,14 @@ import '../../protocol/sentry_runtime.dart'; // see // - https://github.com/flutter/flutter/pull/140783 // - https://github.com/flutter/flutter/pull/163761 +// // This code lives in the Dart only Sentry code, since the code // doesn't require any Flutter dependency. // Additionally, this makes it work on background isolates in // Flutter, where one may not initialize the whole Flutter Sentry -// SDK. +// SDK. +// The const-ness of the properties below ensure that the code +// is tree shaken in a non-Flutter environment. const _hasFlutterRuntimeInformation = FlutterVersion.version == null || FlutterVersion.channel == null || From 1c2026181531c80b266ebf4527924d610a2536f3 Mon Sep 17 00:00:00 2001 From: Jonas Uekoetter Date: Tue, 25 Feb 2025 06:50:03 +0100 Subject: [PATCH 08/12] Fix formatting --- dart/lib/src/event_processor/enricher/flutter_runtime.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dart/lib/src/event_processor/enricher/flutter_runtime.dart b/dart/lib/src/event_processor/enricher/flutter_runtime.dart index 8f0c97304a..37c3837b5a 100644 --- a/dart/lib/src/event_processor/enricher/flutter_runtime.dart +++ b/dart/lib/src/event_processor/enricher/flutter_runtime.dart @@ -1,7 +1,7 @@ import '../../protocol/sentry_runtime.dart'; // The Flutter version information can be fetched via Dart defines, -// see +// see // - https://github.com/flutter/flutter/pull/140783 // - https://github.com/flutter/flutter/pull/163761 // @@ -9,7 +9,7 @@ import '../../protocol/sentry_runtime.dart'; // doesn't require any Flutter dependency. // Additionally, this makes it work on background isolates in // Flutter, where one may not initialize the whole Flutter Sentry -// SDK. +// SDK. // The const-ness of the properties below ensure that the code // is tree shaken in a non-Flutter environment. From d54096c8222c89c8e3d9b07d063e3839e22714b5 Mon Sep 17 00:00:00 2001 From: Jonas Uekoetter Date: Fri, 7 Mar 2025 07:00:30 +0100 Subject: [PATCH 09/12] add test and requested changes --- .../enricher/flutter_runtime.dart | 12 +++---- .../enricher/flutter_version_test.dart | 31 +++++++++++++++++++ 2 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 dart/test/event_processor/enricher/flutter_version_test.dart diff --git a/dart/lib/src/event_processor/enricher/flutter_runtime.dart b/dart/lib/src/event_processor/enricher/flutter_runtime.dart index 37c3837b5a..e942f9a5ad 100644 --- a/dart/lib/src/event_processor/enricher/flutter_runtime.dart +++ b/dart/lib/src/event_processor/enricher/flutter_runtime.dart @@ -13,24 +13,24 @@ import '../../protocol/sentry_runtime.dart'; // The const-ness of the properties below ensure that the code // is tree shaken in a non-Flutter environment. -const _hasFlutterRuntimeInformation = FlutterVersion.version == null || +const _isFlutterRuntimeInformationAbsent = FlutterVersion.version == null || FlutterVersion.channel == null || FlutterVersion.frameworkRevision == null; -const SentryRuntime? flutterRuntime = _hasFlutterRuntimeInformation +const SentryRuntime? flutterRuntime = _isFlutterRuntimeInformationAbsent ? null : SentryRuntime( name: 'Flutter', version: '${FlutterVersion.version} (${FlutterVersion.channel})', build: FlutterVersion.frameworkRevision, + rawDescription: '${FlutterVersion.version} (${FlutterVersion.channel}) ' + '- Git hash ${FlutterVersion.frameworkRevision} ' + '- Git URL ${FlutterVersion.gitUrl}', ); const SentryRuntime? dartFlutterRuntime = FlutterVersion.dartVersion == null ? null - : SentryRuntime( - name: 'Dart', - version: FlutterVersion.dartVersion, - ); + : SentryRuntime(name: 'Dart', version: FlutterVersion.dartVersion); /// Details about the Flutter version this app was compiled with, /// corresponding to the output of `flutter --version`. diff --git a/dart/test/event_processor/enricher/flutter_version_test.dart b/dart/test/event_processor/enricher/flutter_version_test.dart new file mode 100644 index 0000000000..f2ec4e4c5e --- /dev/null +++ b/dart/test/event_processor/enricher/flutter_version_test.dart @@ -0,0 +1,31 @@ +import 'package:sentry/src/event_processor/enricher/flutter_runtime.dart'; +import 'package:test/test.dart'; + +void main() { + test('FlutterVersion.version contains the current version', () { + expect(FlutterVersion.version, const String.fromEnvironment('FLUTTER_VERSION')); + }); + + test('FlutterVersion.channel contains the current channel', () { + expect(FlutterVersion.channel, const String.fromEnvironment('FLUTTER_CHANNEL')); + }); + + test('FlutterVersion.gitUrl contains the current git URL', () { + expect(FlutterVersion.gitUrl, const String.fromEnvironment('FLUTTER_GIT_URL')); + }); + + test('FlutterVersion.frameworkRevision contains the current framework revision', () { + expect( + FlutterVersion.frameworkRevision, + const String.fromEnvironment('FLUTTER_FRAMEWORK_REVISION'), + ); + }); + + test('FlutterVersion.engineRevision contains the current engine revision', () { + expect(FlutterVersion.engineRevision, const String.fromEnvironment('FLUTTER_ENGINE_REVISION')); + }); + + test('FlutterVersion.dartVersion contains the current Dart version', () { + expect(FlutterVersion.dartVersion, const String.fromEnvironment('FLUTTER_DART_VERSION')); + }); +} \ No newline at end of file From 6e323397d7c38683e2caa5b8ae68445c37356adf Mon Sep 17 00:00:00 2001 From: Jonas Uekoetter Date: Mon, 10 Mar 2025 10:38:56 +0100 Subject: [PATCH 10/12] move tests to flutter package --- .../enricher/flutter_version_test.dart | 31 -------------- flutter/test/flutter_version_test.dart | 41 +++++++++++++++++++ 2 files changed, 41 insertions(+), 31 deletions(-) delete mode 100644 dart/test/event_processor/enricher/flutter_version_test.dart create mode 100644 flutter/test/flutter_version_test.dart diff --git a/dart/test/event_processor/enricher/flutter_version_test.dart b/dart/test/event_processor/enricher/flutter_version_test.dart deleted file mode 100644 index f2ec4e4c5e..0000000000 --- a/dart/test/event_processor/enricher/flutter_version_test.dart +++ /dev/null @@ -1,31 +0,0 @@ -import 'package:sentry/src/event_processor/enricher/flutter_runtime.dart'; -import 'package:test/test.dart'; - -void main() { - test('FlutterVersion.version contains the current version', () { - expect(FlutterVersion.version, const String.fromEnvironment('FLUTTER_VERSION')); - }); - - test('FlutterVersion.channel contains the current channel', () { - expect(FlutterVersion.channel, const String.fromEnvironment('FLUTTER_CHANNEL')); - }); - - test('FlutterVersion.gitUrl contains the current git URL', () { - expect(FlutterVersion.gitUrl, const String.fromEnvironment('FLUTTER_GIT_URL')); - }); - - test('FlutterVersion.frameworkRevision contains the current framework revision', () { - expect( - FlutterVersion.frameworkRevision, - const String.fromEnvironment('FLUTTER_FRAMEWORK_REVISION'), - ); - }); - - test('FlutterVersion.engineRevision contains the current engine revision', () { - expect(FlutterVersion.engineRevision, const String.fromEnvironment('FLUTTER_ENGINE_REVISION')); - }); - - test('FlutterVersion.dartVersion contains the current Dart version', () { - expect(FlutterVersion.dartVersion, const String.fromEnvironment('FLUTTER_DART_VERSION')); - }); -} \ No newline at end of file diff --git a/flutter/test/flutter_version_test.dart b/flutter/test/flutter_version_test.dart new file mode 100644 index 0000000000..f4e8dc04e5 --- /dev/null +++ b/flutter/test/flutter_version_test.dart @@ -0,0 +1,41 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:sentry/src/event_processor/enricher/flutter_runtime.dart'; + +void main() { + group(FlutterVersion, () { + test('FlutterVersion.version contains the current version', () { + expect(FlutterVersion.version, + const String.fromEnvironment('FLUTTER_VERSION')); + }); + + test('FlutterVersion.channel contains the current channel', () { + expect(FlutterVersion.channel, + const String.fromEnvironment('FLUTTER_CHANNEL')); + }); + + test('FlutterVersion.gitUrl contains the current git URL', () { + expect(FlutterVersion.gitUrl, + const String.fromEnvironment('FLUTTER_GIT_URL')); + }); + + test( + 'FlutterVersion.frameworkRevision contains the current framework revision', + () { + expect( + FlutterVersion.frameworkRevision, + const String.fromEnvironment('FLUTTER_FRAMEWORK_REVISION'), + ); + }); + + test('FlutterVersion.engineRevision contains the current engine revision', + () { + expect(FlutterVersion.engineRevision, + const String.fromEnvironment('FLUTTER_ENGINE_REVISION')); + }); + + test('FlutterVersion.dartVersion contains the current Dart version', () { + expect(FlutterVersion.dartVersion, + const String.fromEnvironment('FLUTTER_DART_VERSION')); + }); + }, skip: const bool.hasEnvironment('FLUTTER_VERSION')); +} From 9638c1177a37e0d2ed2583cc6ffd1cb808751eeb Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Mon, 10 Mar 2025 13:48:01 +0100 Subject: [PATCH 11/12] skip if environment is missing --- flutter/test/flutter_version_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flutter/test/flutter_version_test.dart b/flutter/test/flutter_version_test.dart index f4e8dc04e5..0f8dcd2fe1 100644 --- a/flutter/test/flutter_version_test.dart +++ b/flutter/test/flutter_version_test.dart @@ -37,5 +37,5 @@ void main() { expect(FlutterVersion.dartVersion, const String.fromEnvironment('FLUTTER_DART_VERSION')); }); - }, skip: const bool.hasEnvironment('FLUTTER_VERSION')); + }, skip: !(const bool.hasEnvironment('FLUTTER_VERSION'))); } From 81fd25c007469ef9978cb5ed11948962304db7c5 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Mon, 10 Mar 2025 13:48:07 +0100 Subject: [PATCH 12/12] add ignore --- dart/example_web/web/main.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/dart/example_web/web/main.dart b/dart/example_web/web/main.dart index 3c0305b49e..7e349b7276 100644 --- a/dart/example_web/web/main.dart +++ b/dart/example_web/web/main.dart @@ -24,6 +24,7 @@ Future main() async { Future runApp() async { print('runApp'); + // ignore: deprecated_member_use document.querySelector('#output')?.text = 'Your Dart app is running.'; await Sentry.addBreadcrumb(