Handle null values for `FlutterStore.flutterClientId`. (#9820)
Required bug fix for the devtools release: https://github.com/flutter/devtools/issues/9819. This also bumps the flutter version to the latest.
diff --git a/flutter-candidate.txt b/flutter-candidate.txt
index d9bece0..135d4ee 100644
--- a/flutter-candidate.txt
+++ b/flutter-candidate.txt
@@ -1 +1 @@
-b0e66e6dd81c20dae6a3ce2ee515a165dbbbfb3e
+02a06a851ff3d25e353f5f33f46c47f179e70467
diff --git a/packages/devtools_app/lib/src/framework/observer/_memory_web.dart b/packages/devtools_app/lib/src/framework/observer/_memory_web.dart
index c6e56a3..251cfb6 100644
--- a/packages/devtools_app/lib/src/framework/observer/_memory_web.dart
+++ b/packages/devtools_app/lib/src/framework/observer/_memory_web.dart
@@ -65,7 +65,8 @@
@JS()
extension type _UserAgentSpecificMemoryBreakdownAttributionContainerElement._(
JSObject _
-) implements JSObject {
+)
+ implements JSObject {
external String get id;
external String get url;
diff --git a/packages/devtools_app/test/service/timeline_streams_test.dart b/packages/devtools_app/test/service/timeline_streams_test.dart
index 7c34529..c51353c 100644
--- a/packages/devtools_app/test/service/timeline_streams_test.dart
+++ b/packages/devtools_app/test/service/timeline_streams_test.dart
@@ -22,30 +22,23 @@
await env.tearDownEnvironment(force: true);
});
- test(
- 'timeline streams initialized on vm service opened',
- () async {
- await env.setupEnvironment();
+ test('timeline streams initialized on vm service opened', () async {
+ await env.setupEnvironment();
- // Await a short delay to make sure the timelineStreamManager is done
- // initializing.
- await delay();
+ // Await a short delay to make sure the timelineStreamManager is done
+ // initializing.
+ await delay();
- expect(serviceConnection.serviceManager.service, equals(env.service));
- expect(serviceConnection.timelineStreamManager, isNotNull);
- expect(
- serviceConnection.timelineStreamManager.basicStreams,
- isNotEmpty,
- );
- expect(
- serviceConnection.timelineStreamManager.advancedStreams,
- isNotEmpty,
- );
+ expect(serviceConnection.serviceManager.service, equals(env.service));
+ expect(serviceConnection.timelineStreamManager, isNotNull);
+ expect(serviceConnection.timelineStreamManager.basicStreams, isNotEmpty);
+ expect(
+ serviceConnection.timelineStreamManager.advancedStreams,
+ isNotEmpty,
+ );
- await env.tearDownEnvironment();
- },
- timeout: const Timeout.factor(4),
- );
+ await env.tearDownEnvironment();
+ }, timeout: const Timeout.factor(4));
test('notifies on stream change', () async {
await env.setupEnvironment();
diff --git a/packages/devtools_shared/CHANGELOG.md b/packages/devtools_shared/CHANGELOG.md
index dd30246..0f1f770 100644
--- a/packages/devtools_shared/CHANGELOG.md
+++ b/packages/devtools_shared/CHANGELOG.md
@@ -3,6 +3,9 @@
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file or at https://developers.google.com/open-source/licenses/bsd.
-->
+# 13.0.1
+* Handle null values for `FlutterStore.flutterClientId`.
+
# 13.0.0
* **Breaking change:** Removed `DevToolsStoreKeys.analyticsEnabled` and
`DevToolsStoreKeys.isFirstRun` since these were only used for legacy analytics.
diff --git a/packages/devtools_shared/lib/src/server/flutter_store.dart b/packages/devtools_shared/lib/src/server/flutter_store.dart
index 3441070..a45ebda 100644
--- a/packages/devtools_shared/lib/src/server/flutter_store.dart
+++ b/packages/devtools_shared/lib/src/server/flutter_store.dart
@@ -17,5 +17,6 @@
bool get gaEnabled => properties[gaEnabledKey] == true;
- String get flutterClientId => properties[flutterClientIdKey] as String;
+ String get flutterClientId =>
+ (properties[flutterClientIdKey] as String?) ?? '';
}
diff --git a/packages/devtools_shared/lib/src/server/server_api.dart b/packages/devtools_shared/lib/src/server/server_api.dart
index 4cc838a..f9b5072 100644
--- a/packages/devtools_shared/lib/src/server/server_api.dart
+++ b/packages/devtools_shared/lib/src/server/server_api.dart
@@ -68,13 +68,8 @@
dtd,
);
- // TODO(kenz): remove legacy analytics once the unified analytics rollout
- // is complete and verified for robustness (est. Fall 2025).
-
// ----- Flutter Tool GA store. -----
case apiGetFlutterGAClientId:
- // Flutter Tool GA clientId - ONLY get Flutter's clientId if enabled is
- // true.
return _encodeResponse(
LocalFileSystem.flutterStoreExists()
? _flutterStore.flutterClientId
diff --git a/packages/devtools_shared/pubspec.yaml b/packages/devtools_shared/pubspec.yaml
index 286fefc..dce148c 100644
--- a/packages/devtools_shared/pubspec.yaml
+++ b/packages/devtools_shared/pubspec.yaml
@@ -4,7 +4,7 @@
name: devtools_shared
description: Package of shared Dart structures between devtools_app, dds, and other tools.
-version: 13.0.0
+version: 13.0.1
repository: https://github.com/flutter/devtools/tree/master/packages/devtools_shared
diff --git a/packages/devtools_shared/test/server/persistent_properties_test.dart b/packages/devtools_shared/test/server/persistent_properties_test.dart
index a1b667c..8358e7a 100644
--- a/packages/devtools_shared/test/server/persistent_properties_test.dart
+++ b/packages/devtools_shared/test/server/persistent_properties_test.dart
@@ -15,7 +15,8 @@
const storeName = 'test_store';
setUp(() {
- tempDir = Directory.systemTemp.createTempSync('persistent_properties_test');
+ tempDir =
+ Directory.systemTemp.createTempSync('persistent_properties_test');
properties = IOPersistentProperties(
storeName,
documentDirPath: tempDir.path,