Skip to content

Commit 7d9ae43

Browse files
Fix late initialization error in DevTools store logic (#9816)
* Fix late initialization error in DevTools store logic * fix error in persistent properties and add test
1 parent d894a66 commit 7d9ae43

4 files changed

Lines changed: 67 additions & 19 deletions

File tree

packages/devtools_shared/lib/src/server/devtools_store.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,11 @@ enum DevToolsStoreKeys {
3434
class DevToolsUsage {
3535
DevToolsUsage() {
3636
LocalFileSystem.maybeMoveLegacyDevToolsStore();
37-
_removeLegacyKeys();
38-
3937
properties = IOPersistentProperties(
4038
storeName,
4139
documentDirPath: LocalFileSystem.devToolsDir(),
4240
);
41+
_removeLegacyKeys();
4342
}
4443

4544
static const storeName = '.devtools';

packages/devtools_shared/lib/src/server/file_system.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ class IOPersistentProperties {
141141
}
142142

143143
void remove(String propertyName) {
144-
_map.remove(propertyName);
144+
this[propertyName] = null;
145145
}
146146
}
147147

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// Copyright 2026 The Flutter Authors
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file or at https://developers.google.com/open-source/licenses/bsd.
4+
5+
import 'dart:convert';
6+
import 'dart:io';
7+
8+
import 'package:devtools_shared/src/server/file_system.dart';
9+
import 'package:test/test.dart';
10+
11+
void main() {
12+
group('IOPersistentProperties', () {
13+
late Directory tempDir;
14+
late IOPersistentProperties properties;
15+
const storeName = 'test_store';
16+
17+
setUp(() {
18+
tempDir = Directory.systemTemp.createTempSync('persistent_properties_test');
19+
properties = IOPersistentProperties(
20+
storeName,
21+
documentDirPath: tempDir.path,
22+
);
23+
});
24+
25+
tearDown(() {
26+
tempDir.deleteSync(recursive: true);
27+
});
28+
29+
test('remove persists changes to disk', () {
30+
properties['key1'] = 'value1';
31+
properties['key2'] = 'value2';
32+
33+
final file = File('${tempDir.path}/$storeName');
34+
expect(file.existsSync(), isTrue);
35+
36+
var content = file.readAsStringSync();
37+
var json = (jsonDecode(content) as Map).cast<String, Object>();
38+
expect(json['key1'], 'value1');
39+
expect(json['key2'], 'value2');
40+
41+
properties.remove('key1');
42+
43+
content = file.readAsStringSync();
44+
json = (jsonDecode(content) as Map).cast<String, Object>();
45+
expect(json.containsKey('key1'), isFalse);
46+
expect(json['key2'], 'value2');
47+
});
48+
});
49+
}

pubspec.lock

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,10 @@ packages:
8585
dependency: "direct dev"
8686
description:
8787
name: build_runner
88-
sha256: "22fdcc3cfeb9d974d7408718c4be15ec5e9b1b350088f3a6c88f154e74dd700d"
88+
sha256: "1523ce62448ebac2c15a8ba5fbad8acac169788658a7dd2a1c2d9c2a9318b9a6"
8989
url: "https://pub.dev"
9090
source: hosted
91-
version: "2.14.1"
91+
version: "2.15.0"
9292
built_collection:
9393
dependency: transitive
9494
description:
@@ -101,10 +101,10 @@ packages:
101101
dependency: transitive
102102
description:
103103
name: built_value
104-
sha256: "0730c18c770d05636a8f945c32a4d7d81cb6e0f0148c8db4ad12e7748f7e49af"
104+
sha256: "34e4067d30ce212937df995f03b69992eea683539ceeac7f679a1f1eba055b56"
105105
url: "https://pub.dev"
106106
source: hosted
107-
version: "8.12.5"
107+
version: "8.12.6"
108108
characters:
109109
dependency: transitive
110110
description:
@@ -539,10 +539,10 @@ packages:
539539
dependency: transitive
540540
description:
541541
name: matcher
542-
sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
542+
sha256: "31bd099b47c10cd1aeb55146a2d46ce0277630ecef3f7dae54ad7873f36696cd"
543543
url: "https://pub.dev"
544544
source: hosted
545-
version: "0.12.19"
545+
version: "0.12.20"
546546
material_color_utilities:
547547
dependency: transitive
548548
description:
@@ -555,10 +555,10 @@ packages:
555555
dependency: transitive
556556
description:
557557
name: meta
558-
sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349"
558+
sha256: df0c643f44ad098eb37988027a8e2b2b5a031fd3977f06bbfd3a76637e8df739
559559
url: "https://pub.dev"
560560
source: hosted
561-
version: "1.18.0"
561+
version: "1.18.2"
562562
mime:
563563
dependency: transitive
564564
description:
@@ -863,26 +863,26 @@ packages:
863863
dependency: transitive
864864
description:
865865
name: test
866-
sha256: "8d9ceddbab833f180fbefed08afa76d7c03513dfdba87ffcec2718b02bbcbf20"
866+
sha256: ca578dc12bb8b2f40b67b7d3bd2fac4f31c01a6ff7130a14e2597b919934507f
867867
url: "https://pub.dev"
868868
source: hosted
869-
version: "1.31.0"
869+
version: "1.31.1"
870870
test_api:
871871
dependency: transitive
872872
description:
873873
name: test_api
874-
sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e"
874+
sha256: "2a122cbe059f8b610d3a5415f42e255b6c17b1f21eee1d960f31080237fb4f11"
875875
url: "https://pub.dev"
876876
source: hosted
877-
version: "0.7.11"
877+
version: "0.7.12"
878878
test_core:
879879
dependency: transitive
880880
description:
881881
name: test_core
882-
sha256: "1991d4cfe85d5043241acac92962c3977c8d2f2add1ee73130c7b286417d1d34"
882+
sha256: d2e98ec12998368dc59ddd47ab709f2cd55acd6b66dc7db764455a44082f4bc5
883883
url: "https://pub.dev"
884884
source: hosted
885-
version: "0.6.17"
885+
version: "0.6.18"
886886
typed_data:
887887
dependency: transitive
888888
description:
@@ -967,10 +967,10 @@ packages:
967967
dependency: transitive
968968
description:
969969
name: vector_math
970-
sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
970+
sha256: "47a1b32ee755c3fcffa33db52a7258c137f97bdb2209a1075be847809fac4ccf"
971971
url: "https://pub.dev"
972972
source: hosted
973-
version: "2.2.0"
973+
version: "2.3.0"
974974
vm_service:
975975
dependency: transitive
976976
description:

0 commit comments

Comments
 (0)