Skip to content

Commit 5d1d103

Browse files
Support static DevTools extensions (flutter#7612)
1 parent e27cbc9 commit 5d1d103

37 files changed

+1221
-444
lines changed

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,6 @@ DEPENDENCIES.md
4141

4242
# Ignore VS code workspaces that may be configured per-user
4343
*.code-workspace
44+
45+
# Ignore devtools_options.yaml files under example.
46+
**/example/**/devtools_options.yaml

packages/devtools_app/integration_test/test/live_connection/devtools_extensions_test.dart

+19-2
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,30 @@ void main() {
2929
expect(testApp.vmServiceUri, isNotNull);
3030
});
3131

32+
setUp(() {
33+
resetDevToolsExtensionEnabledStates();
34+
});
35+
3236
tearDown(() {
3337
resetDevToolsExtensionEnabledStates();
3438
});
3539

3640
testWidgets('end to end extensions flow', (tester) async {
37-
await pumpAndConnectDevTools(tester, testApp);
38-
resetDevToolsExtensionEnabledStates();
41+
await pumpDevTools(tester);
42+
43+
logStatus(
44+
'verify static extensions are available before connecting to an app',
45+
);
46+
expect(extensionService.availableExtensions.value.length, 1);
47+
expect(extensionService.visibleExtensions.value.length, 1);
48+
await _verifyExtensionsSettingsMenu(
49+
tester,
50+
[
51+
ExtensionEnabledState.none, // bar
52+
],
53+
);
54+
55+
await connectToTestApp(tester, testApp);
3956

4057
expect(extensionService.availableExtensions.value.length, 5);
4158
expect(extensionService.visibleExtensions.value.length, 5);

packages/devtools_app/lib/src/app.dart

+15-15
Original file line numberDiff line numberDiff line change
@@ -139,26 +139,26 @@ class DevToolsAppState extends State<DevToolsApp> with AutoDisposeMixin {
139139

140140
unawaited(ga.setupDimensions());
141141

142-
if (FeatureFlags.devToolsExtensions) {
143-
addAutoDisposeListener(extensionService.availableExtensions, () {
144-
setState(() {
145-
_clearCachedRoutes();
146-
});
147-
});
148-
addAutoDisposeListener(extensionService.visibleExtensions, () {
149-
setState(() {
150-
_clearCachedRoutes();
151-
});
142+
void clearRoutesAndSetState() {
143+
setState(() {
144+
_clearCachedRoutes();
152145
});
153146
}
154147

148+
if (FeatureFlags.devToolsExtensions) {
149+
addAutoDisposeListener(
150+
extensionService.availableExtensions,
151+
clearRoutesAndSetState,
152+
);
153+
addAutoDisposeListener(
154+
extensionService.visibleExtensions,
155+
clearRoutesAndSetState,
156+
);
157+
}
158+
155159
addAutoDisposeListener(
156160
serviceConnection.serviceManager.isolateManager.mainIsolate,
157-
() {
158-
setState(() {
159-
_clearCachedRoutes();
160-
});
161-
},
161+
clearRoutesAndSetState,
162162
);
163163

164164
_isDarkThemeEnabledPreference = preferences.darkModeTheme.value;

packages/devtools_app/lib/src/extensions/extension_screen.dart

+1-2
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ class ExtensionScreen extends Screen {
2323
id: extensionConfig.screenId,
2424
title: extensionConfig.name,
2525
icon: extensionConfig.icon,
26-
// TODO(kenz): support static DevTools extensions.
27-
requiresConnection: true,
26+
requiresConnection: extensionConfig.requiresConnection,
2827
);
2928

3029
final DevToolsExtensionConfig extensionConfig;

0 commit comments

Comments
 (0)