[Inspector V2] Enable Inspector V2 by default  (#8650)

diff --git a/packages/devtools_app/lib/src/framework/scaffold/settings_dialog.dart b/packages/devtools_app/lib/src/framework/scaffold/settings_dialog.dart
index 7d0a0d7..ebddde8 100644
--- a/packages/devtools_app/lib/src/framework/scaffold/settings_dialog.dart
+++ b/packages/devtools_app/lib/src/framework/scaffold/settings_dialog.dart
@@ -94,19 +94,6 @@
                 gaItem: gac.wasm,
               ),
             ),
-            // TODO(https://github.com/flutter/devtools/issues/7860): Clean-up
-            // after Inspector V2 has been released.
-            if (FeatureFlags.inspectorV2)
-              Flexible(
-                child: CheckboxSetting(
-                  notifier:
-                      preferences.inspector.inspectorV2Enabled
-                          as ValueNotifier<bool?>,
-                  title: 'Enable the new Inspector',
-                  description: 'Try out the redesigned Flutter Inspector.',
-                  gaItem: gac.inspectorV2Enabled,
-                ),
-              ),
           ],
           const SizedBox(height: largeSpacing),
           ...dialogSubHeader(theme, 'Troubleshooting'),
diff --git a/packages/devtools_app/lib/src/screens/inspector_shared/inspector_controls.dart b/packages/devtools_app/lib/src/screens/inspector_shared/inspector_controls.dart
index 3509d30..22229d5 100644
--- a/packages/devtools_app/lib/src/screens/inspector_shared/inspector_controls.dart
+++ b/packages/devtools_app/lib/src/screens/inspector_shared/inspector_controls.dart
@@ -58,23 +58,6 @@
           ShowImplementationWidgetsButton(controller: controller!),
         ],
         const Spacer(),
-        // TODO(https://github.com/flutter/devtools/issues/7860): Clean-up after
-        // Inspector V2 has been released.
-        if (FeatureFlags.inspectorV2) ...[
-          const SizedBox(width: defaultSpacing),
-          SwitchSetting(
-            notifier:
-                preferences.inspector.inspectorV2Enabled as ValueNotifier<bool>,
-            title: 'New Inspector',
-            tooltip: 'Try out the redesigned Flutter Inspector.',
-            gaScreen: gac.inspector,
-            gaItem: gac.inspectorV2Enabled,
-            activeColor: activeButtonColor,
-            inactiveColor: Colors.transparent,
-            minScreenWidthForTextBeforeScaling:
-                minScreenWidthForTextBeforeScaling,
-          ),
-        ],
         const SizedBox(width: defaultSpacing),
         const InspectorServiceExtensionButtonGroup(),
       ],
diff --git a/packages/devtools_app/lib/src/screens/inspector_shared/inspector_screen.dart b/packages/devtools_app/lib/src/screens/inspector_shared/inspector_screen.dart
index 749f6d0..94a31d2 100644
--- a/packages/devtools_app/lib/src/screens/inspector_shared/inspector_screen.dart
+++ b/packages/devtools_app/lib/src/screens/inspector_shared/inspector_screen.dart
@@ -52,21 +52,24 @@
         > {
   bool get shouldShowInspectorV2 =>
       FeatureFlags.inspectorV2 &&
-      preferences.inspector.inspectorV2Enabled.value;
+      !preferences.inspector.legacyInspectorEnabled.value;
 
   @override
   void didChangeDependencies() {
     super.didChangeDependencies();
     if (!initController()) return;
 
-    addAutoDisposeListener(preferences.inspector.inspectorV2Enabled, () async {
-      controller.legacyInspectorController.setVisibleToUser(
-        !shouldShowInspectorV2,
-      );
-      await controller.v2InspectorController.setVisibleToUser(
-        shouldShowInspectorV2,
-      );
-    });
+    addAutoDisposeListener(
+      preferences.inspector.legacyInspectorEnabled,
+      () async {
+        controller.legacyInspectorController.setVisibleToUser(
+          !shouldShowInspectorV2,
+        );
+        await controller.v2InspectorController.setVisibleToUser(
+          shouldShowInspectorV2,
+        );
+      },
+    );
   }
 
   @override
@@ -74,8 +77,8 @@
     final controller = Provider.of<InspectorScreenController>(context);
 
     return ValueListenableBuilder(
-      valueListenable: preferences.inspector.inspectorV2Enabled,
-      builder: (context, v2Enabled, _) {
+      valueListenable: preferences.inspector.legacyInspectorEnabled,
+      builder: (context, _, _) {
         if (shouldShowInspectorV2) {
           return v2.InspectorScreenBody(
             controller: controller.v2InspectorController,
diff --git a/packages/devtools_app/lib/src/screens/inspector_shared/inspector_settings_dialog.dart b/packages/devtools_app/lib/src/screens/inspector_shared/inspector_settings_dialog.dart
index 624bb86..11d8f50 100644
--- a/packages/devtools_app/lib/src/screens/inspector_shared/inspector_settings_dialog.dart
+++ b/packages/devtools_app/lib/src/screens/inspector_shared/inspector_settings_dialog.dart
@@ -10,6 +10,7 @@
 
 import '../../shared/analytics/analytics.dart' as ga;
 import '../../shared/analytics/constants.dart' as gac;
+import '../../shared/feature_flags.dart';
 import '../../shared/globals.dart';
 import '../../shared/preferences/preferences.dart';
 import '../../shared/primitives/simple_items.dart';
@@ -25,8 +26,9 @@
     final dialogHeight = scaleByFontFactor(500.0);
 
     return ValueListenableBuilder(
-      valueListenable: preferences.inspector.inspectorV2Enabled,
-      builder: (context, inspectorV2Enabled, _) {
+      valueListenable: preferences.inspector.legacyInspectorEnabled,
+      builder: (context, legacyInspectorEnabled, _) {
+        final inspectorV2Enabled = !legacyInspectorEnabled;
         return DevToolsDialog(
           title: const DialogTitleText('Flutter Inspector Settings'),
           content: SizedBox(
@@ -61,6 +63,22 @@
                   const InspectorDefaultDetailsViewOption(),
                 ],
                 const SizedBox(height: largeSpacing),
+                // TODO(https://github.com/flutter/devtools/issues/7860): Clean-up
+                // after Inspector V2 has been released.
+                if (FeatureFlags.inspectorV2)
+                  Flexible(
+                    child: CheckboxSetting(
+                      notifier:
+                          preferences.inspector.legacyInspectorEnabled
+                              as ValueNotifier<bool?>,
+                      title: 'Use legacy inspector',
+                      description:
+                          'Disable the redesigned Flutter inspector. Please know that '
+                          'the legacy inspector may be removed in a future release.',
+                      gaItem: gac.inspectorV2Enabled,
+                    ),
+                  ),
+                const SizedBox(height: largeSpacing),
                 ...dialogSubHeader(theme, 'Package Directories'),
                 Row(
                   mainAxisAlignment: MainAxisAlignment.spaceBetween,
diff --git a/packages/devtools_app/lib/src/screens/inspector_v2/inspector_screen_body.dart b/packages/devtools_app/lib/src/screens/inspector_v2/inspector_screen_body.dart
index 31c9abc..7d918ff 100644
--- a/packages/devtools_app/lib/src/screens/inspector_v2/inspector_screen_body.dart
+++ b/packages/devtools_app/lib/src/screens/inspector_v2/inspector_screen_body.dart
@@ -13,6 +13,7 @@
 import '../../shared/analytics/constants.dart' as gac;
 import '../../shared/console/eval/inspector_tree_v2.dart';
 import '../../shared/globals.dart';
+import '../../shared/managers/banner_messages.dart';
 import '../../shared/managers/error_badge_manager.dart';
 import '../../shared/primitives/blocking_action_mixin.dart';
 import '../../shared/ui/common_widgets.dart';
@@ -57,6 +58,8 @@
   static const inspectorTreeKey = Key('Inspector Tree');
   static const minScreenWidthForTextBeforeScaling = 900.0;
 
+  static const _welcomeShownStorageId = 'inspectorV2WelcomeShown';
+
   @override
   void dispose() {
     _inspectorTreeController.dispose();
@@ -70,7 +73,7 @@
   }
 
   @override
-  void didChangeDependencies() {
+  void didChangeDependencies() async {
     super.didChangeDependencies();
 
     if (serviceConnection.inspectorService == null) {
@@ -112,6 +115,12 @@
     }
 
     _inspectorTreeController.setSearchTarget(searchTarget);
+
+    unawaited(
+      _maybeShowWelcomeMessage(context).catchError((_) {
+        // Ignore errors.
+      }),
+    );
   }
 
   @override
@@ -217,6 +226,16 @@
       }),
     );
   }
+
+  Future<void> _maybeShowWelcomeMessage(BuildContext context) async {
+    final welcomeAlreadyShown = await storage.getValue(_welcomeShownStorageId);
+    if (welcomeAlreadyShown == 'true') return;
+    // Mark the welcome message as shown.
+    await storage.setValue(_welcomeShownStorageId, 'true');
+    if (context.mounted) {
+      pushWelcomeToNewInspectorMessage(context, InspectorScreen.id);
+    }
+  }
 }
 
 class InspectorTreeControls extends StatelessWidget {
diff --git a/packages/devtools_app/lib/src/shared/analytics/constants.dart b/packages/devtools_app/lib/src/shared/analytics/constants.dart
index 0372549..83679f5 100644
--- a/packages/devtools_app/lib/src/shared/analytics/constants.dart
+++ b/packages/devtools_app/lib/src/shared/analytics/constants.dart
@@ -120,6 +120,7 @@
 const inspectorHoverEvalMode = 'inspectorHoverEvalMode';
 const inspectorV2Enabled = 'inspectorV2Enabled';
 const inspectorAutoRefreshEnabled = 'inspectorAutoRefreshEnabled';
+const inspectorV2Docs = 'inspectorV2Docs';
 const clearLogs = 'clearLogs';
 const copyLogs = 'copyLogs';
 
diff --git a/packages/devtools_app/lib/src/shared/managers/banner_messages.dart b/packages/devtools_app/lib/src/shared/managers/banner_messages.dart
index 43d4565..5bb8c02 100644
--- a/packages/devtools_app/lib/src/shared/managers/banner_messages.dart
+++ b/packages/devtools_app/lib/src/shared/managers/banner_messages.dart
@@ -137,7 +137,8 @@
 // TODO(kenz): add an 'info' type.
 enum BannerMessageType {
   warning,
-  error;
+  error,
+  info;
 
   static BannerMessageType? parse(String? value) {
     for (final type in BannerMessageType.values) {
@@ -164,11 +165,11 @@
   Widget build(BuildContext context) {
     final theme = Theme.of(context);
     final colorScheme = theme.colorScheme;
+    final backgroundColor = _backgroundColor(colorScheme);
+    final foregroundColor = _foregroundColor(colorScheme);
+
     return Card(
-      color:
-          messageType == BannerMessageType.error
-              ? colorScheme.errorContainer
-              : colorScheme.warningContainer,
+      color: backgroundColor,
       margin: const EdgeInsets.only(bottom: intermediateSpacing),
       child: Padding(
         padding: const EdgeInsets.symmetric(
@@ -182,27 +183,22 @@
             Row(
               mainAxisAlignment: MainAxisAlignment.spaceBetween,
               children: [
-                Padding(
-                  padding: const EdgeInsets.symmetric(horizontal: 12.0),
-                  child: Icon(
-                    messageType == BannerMessageType.error
-                        ? Icons.error_outline
-                        : Icons.warning_amber_outlined,
-                    size: actionsIconSize,
-                    color:
-                        messageType == BannerMessageType.error
-                            ? colorScheme.onErrorContainer
-                            : colorScheme.onWarningContainer,
+                if (messageType != BannerMessageType.info)
+                  Padding(
+                    padding: const EdgeInsets.symmetric(horizontal: 12.0),
+                    child: Icon(
+                      messageType == BannerMessageType.error
+                          ? Icons.error_outline
+                          : Icons.warning_amber_outlined,
+                      size: actionsIconSize,
+                      color: foregroundColor,
+                    ),
                   ),
-                ),
                 Expanded(
                   child: RichText(
                     text: TextSpan(
                       style: theme.regularTextStyle.copyWith(
-                        color:
-                            messageType == BannerMessageType.error
-                                ? colorScheme.onErrorContainer
-                                : colorScheme.onWarningContainer,
+                        color: foregroundColor,
                       ),
                       children: textSpans,
                     ),
@@ -213,10 +209,7 @@
                   icon: Icon(
                     Icons.close,
                     size: actionsIconSize,
-                    color:
-                        messageType == BannerMessageType.error
-                            ? colorScheme.onErrorContainer
-                            : colorScheme.onWarningContainer,
+                    color: foregroundColor,
                   ),
                   onPressed:
                       () => bannerMessages.removeMessage(this, dismiss: true),
@@ -228,6 +221,26 @@
       ),
     );
   }
+
+  Color _backgroundColor(ColorScheme colorScheme) {
+    if (messageType == BannerMessageType.info) {
+      return colorScheme.secondaryContainer;
+    }
+
+    return (messageType == BannerMessageType.error
+        ? colorScheme.errorContainer
+        : colorScheme.warningContainer);
+  }
+
+  Color _foregroundColor(ColorScheme colorScheme) {
+    if (messageType == BannerMessageType.info) {
+      return colorScheme.onSecondaryContainer;
+    }
+
+    return (messageType == BannerMessageType.error
+        ? colorScheme.onErrorContainer
+        : colorScheme.onWarningContainer);
+  }
 }
 
 class _BannerError extends BannerMessage {
@@ -247,6 +260,14 @@
   }) : super(messageType: BannerMessageType.warning);
 }
 
+class BannerInfo extends BannerMessage {
+  const BannerInfo({
+    required super.key,
+    required super.textSpans,
+    required super.screenId,
+  }) : super(messageType: BannerMessageType.info);
+}
+
 class DebugModePerformanceMessage {
   const DebugModePerformanceMessage(this.screenId);
 
@@ -503,6 +524,40 @@
   }
 }
 
+class WelcomeToNewInspectorMessage {
+  WelcomeToNewInspectorMessage(this.screenId)
+    : key = Key('WelcomeToNewInspectorMessage - $screenId');
+
+  final Key key;
+
+  final String screenId;
+
+  BannerMessage build(BuildContext context) {
+    const docsUrl = 'https://docs.flutter.dev/tools/devtools/inspector#new';
+    return BannerInfo(
+      key: key,
+      textSpans: [
+        const TextSpan(
+          text: '''
+👋 Welcome to the new Flutter inspector! To get started, check out the ''',
+        ),
+        GaLinkTextSpan(
+          link: GaLink(
+            display: 'documentation',
+            url: docsUrl,
+            gaScreenName: screenId,
+            gaSelectedItemDescription: gac.inspectorV2Docs,
+          ),
+          context: context,
+          style: Theme.of(context).linkTextStyle,
+        ),
+        const TextSpan(text: '.'),
+      ],
+      screenId: screenId,
+    );
+  }
+}
+
 void maybePushDebugModePerformanceMessage(
   BuildContext context,
   String screenId,
@@ -541,6 +596,12 @@
   );
 }
 
+void pushWelcomeToNewInspectorMessage(BuildContext context, String screenId) {
+  bannerMessages.addMessage(
+    WelcomeToNewInspectorMessage(screenId).build(context),
+  );
+}
+
 extension BannerMessageThemeExtension on ThemeData {
   TextStyle get warningMessageLinkStyle => regularTextStyle.copyWith(
     decoration: TextDecoration.underline,
diff --git a/packages/devtools_app/lib/src/shared/preferences/_inspector_preferences.dart b/packages/devtools_app/lib/src/shared/preferences/_inspector_preferences.dart
index a325c74..81725d6 100644
--- a/packages/devtools_app/lib/src/shared/preferences/_inspector_preferences.dart
+++ b/packages/devtools_app/lib/src/shared/preferences/_inspector_preferences.dart
@@ -19,7 +19,7 @@
 class InspectorPreferencesController extends DisposableController
     with AutoDisposeControllerMixin {
   ValueListenable<bool> get hoverEvalModeEnabled => _hoverEvalMode;
-  ValueListenable<bool> get inspectorV2Enabled => _inspectorV2Enabled;
+  ValueListenable<bool> get legacyInspectorEnabled => _legacyInspectorEnabled;
   ValueListenable<bool> get autoRefreshEnabled => _autoRefreshEnabled;
   ValueListenable<InspectorDetailsViewType> get defaultDetailsView =>
       _defaultDetailsView;
@@ -30,7 +30,7 @@
       serviceConnection.inspectorService;
 
   final _hoverEvalMode = ValueNotifier<bool>(false);
-  final _inspectorV2Enabled = ValueNotifier<bool>(false);
+  final _legacyInspectorEnabled = ValueNotifier<bool>(false);
   final _autoRefreshEnabled = ValueNotifier<bool>(true);
   final _pubRootDirectories = ListValueNotifier<String>([]);
   final _pubRootDirectoriesAreBusy = ValueNotifier<bool>(false);
@@ -40,7 +40,8 @@
   );
 
   static const _hoverEvalModeStorageId = 'inspector.hoverEvalMode';
-  static const _inspectorV2EnabledStorageId = 'inspector.inspectorV2Enabled';
+  static const _legacyInspectorEnabledStorageId =
+      'inspector.legacyInspectorEnabled';
   static const _autoRefreshEnabledStorageId = 'inspector.autoRefreshEnabled';
   static const _defaultDetailsViewStorageId =
       'inspector.defaultDetailsViewType';
@@ -66,7 +67,7 @@
 
   Future<void> init() async {
     await _initHoverEvalMode();
-    await _initInspectorV2Enabled();
+    await _initLegacyInspectorEnabled();
     await _initAutoRefreshEnabled();
     // TODO(jacobr): consider initializing this first as it is not blocking.
     _initPubRootDirectories();
@@ -81,11 +82,13 @@
     );
   }
 
-  Future<void> _initInspectorV2Enabled() async {
-    await _updateInspectorV2Enabled();
+  Future<void> _initLegacyInspectorEnabled() async {
+    // TODO(https://github.com/flutter/devtools/issues/8667): Consider removing
+    // the old 'inspector.inspectorV2Enabled' key if it is set.
+    await _updateLegacyInspectorEnabled();
     _saveBooleanPreferenceChanges(
-      preferenceStorageId: _inspectorV2EnabledStorageId,
-      preferenceNotifier: _inspectorV2Enabled,
+      preferenceStorageId: _legacyInspectorEnabledStorageId,
+      preferenceNotifier: _legacyInspectorEnabled,
     );
   }
 
@@ -105,10 +108,10 @@
     );
   }
 
-  Future<void> _updateInspectorV2Enabled() async {
+  Future<void> _updateLegacyInspectorEnabled() async {
     await _updateBooleanPreference(
-      preferenceStorageId: _inspectorV2EnabledStorageId,
-      preferenceNotifier: _inspectorV2Enabled,
+      preferenceStorageId: _legacyInspectorEnabledStorageId,
+      preferenceNotifier: _legacyInspectorEnabled,
       defaultValue: false,
     );
   }
@@ -224,7 +227,7 @@
     _checkedFlutterPubRoot = false;
     await _updateMainScriptRef();
     await _updateHoverEvalMode();
-    await _updateInspectorV2Enabled();
+    await _updateLegacyInspectorEnabled();
     await loadPubRootDirectories();
     await _updateInspectorDetailsViewSelection();
   }
@@ -440,8 +443,8 @@
   }
 
   @visibleForTesting
-  void setInspectorV2Enabled(bool inspectorV2Enabled) {
-    _inspectorV2Enabled.value = inspectorV2Enabled;
+  void setLegacyInspectorEnabled(bool legacyInspectorEnabled) {
+    _legacyInspectorEnabled.value = legacyInspectorEnabled;
   }
 
   @visibleForTesting
diff --git a/packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md b/packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md
index efcb692..1f9b806 100644
--- a/packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md
+++ b/packages/devtools_app/release_notes/NEXT_RELEASE_NOTES.md
@@ -14,8 +14,10 @@
 
 ## Inspector updates
 
-* Selecting an implementation widget on the device while implementation widget's are hidden in the [new Inspector's](https://docs.flutter.dev/tools/devtools/release-notes/release-notes-2.40.1#inspector-updates) does not show an error. - [#8625](https://github.com/flutter/devtools/pull/8625)
-* Enabled auto-refreshes of the widget tree on hot-reloads and navigation events by default. This can be disabled in the Inspector settings. - [#8646](https://github.com/flutter/devtools/pull/8646)
+* The new inspector is enabled by default. This can be disabled in the inspector settings. - [#8650](https://github.com/flutter/devtools/pull/8650)
+    ![Legacy inspector setting](images/legacy_inspector_setting.png "Legacy inspector setting")
+* Selecting an implementation widget on the device while implementation widget's are hidden in the [new inspector's](https://docs.flutter.dev/tools/devtools/release-notes/release-notes-2.40.1#inspector-updates) does not show an error. - [#8625](https://github.com/flutter/devtools/pull/8625)
+* Enabled auto-refreshes of the widget tree on hot-reloads and navigation events by default. This can be disabled in the inspector settings. - [#8646](https://github.com/flutter/devtools/pull/8646)
     ![Auto-refresh setting](images/inspector_auto_refresh_setting.png "Inspector auto-refresh setting")
 
 ## Performance updates
diff --git a/packages/devtools_app/release_notes/images/legacy_inspector_setting.png b/packages/devtools_app/release_notes/images/legacy_inspector_setting.png
new file mode 100644
index 0000000..e82f053
--- /dev/null
+++ b/packages/devtools_app/release_notes/images/legacy_inspector_setting.png
Binary files differ
diff --git a/packages/devtools_app/test/screens/inspector/inspector_integration_test.dart b/packages/devtools_app/test/screens/inspector/inspector_integration_test.dart
index e070bc7..f7a393e 100644
--- a/packages/devtools_app/test/screens/inspector/inspector_integration_test.dart
+++ b/packages/devtools_app/test/screens/inspector/inspector_integration_test.dart
@@ -42,7 +42,7 @@
   setUp(() async {
     await env.setupEnvironment();
     // Ensure the legacy inspector is enabled:
-    preferences.inspector.setInspectorV2Enabled(false);
+    preferences.inspector.setLegacyInspectorEnabled(true);
   });
 
   tearDownAll(() async {
diff --git a/packages/devtools_app/test/screens/inspector/inspector_screen_test.dart b/packages/devtools_app/test/screens/inspector/inspector_screen_test.dart
index 9dcb8d2..3a43ec6 100644
--- a/packages/devtools_app/test/screens/inspector/inspector_screen_test.dart
+++ b/packages/devtools_app/test/screens/inspector/inspector_screen_test.dart
@@ -63,6 +63,8 @@
     setGlobal(Storage, FlutterTestStorage());
     setGlobal(NotificationService, NotificationService());
     fakeServiceConnection.consoleService.ensureServiceInitialized();
+    // Enable the legacy inspector:
+    preferences.inspector.setLegacyInspectorEnabled(true);
   });
 
   Future<void> mockExtensions() async {
diff --git a/packages/devtools_app/test/screens/inspector_v2/inspector_integration_test.dart b/packages/devtools_app/test/screens/inspector_v2/inspector_integration_test.dart
index 81a96d2..e19cfe7 100644
--- a/packages/devtools_app/test/screens/inspector_v2/inspector_integration_test.dart
+++ b/packages/devtools_app/test/screens/inspector_v2/inspector_integration_test.dart
@@ -12,6 +12,7 @@
     hide InspectorScreenBodyState, InspectorScreenBody, InspectorRowContent;
 import 'package:devtools_app/src/screens/inspector/inspector_screen_body.dart'
     as legacy;
+import 'package:devtools_app/src/screens/inspector_shared/inspector_controls.dart';
 import 'package:devtools_app/src/screens/inspector_v2/inspector_screen_body.dart';
 import 'package:devtools_app/src/screens/inspector_v2/inspector_tree_controller.dart';
 import 'package:devtools_app/src/screens/inspector_v2/widget_properties/properties_view.dart';
@@ -60,13 +61,13 @@
   setUp(() async {
     await env.setupEnvironment();
     // Enable the V2 inspector:
-    preferences.inspector.setInspectorV2Enabled(true);
+    preferences.inspector.setLegacyInspectorEnabled(false);
   });
 
   tearDown(() async {
     await env.tearDownEnvironment(force: true);
     // Re-set changes to preferences:
-    preferences.inspector.setInspectorV2Enabled(false);
+    preferences.inspector.setLegacyInspectorEnabled(true);
   });
 
   tearDownAll(() {
@@ -356,7 +357,7 @@
     await tester.pumpAndSettle(inspectorChangeSettleTime);
 
     // Disable Inspector V2:
-    await toggleV2Inspector(tester);
+    await toggleLegacyInspector(tester);
     await tester.pumpAndSettle(inspectorChangeSettleTime);
 
     // Verify the legacy inspector is visible:
@@ -376,7 +377,7 @@
       await _loadInspectorUI(tester);
 
       // Disable Inspector V2.
-      await toggleV2Inspector(tester);
+      await toggleLegacyInspector(tester);
       await tester.pumpAndSettle(inspectorChangeSettleTime);
 
       // Verify the legacy inspector is visible.
@@ -387,7 +388,7 @@
       await tester.pumpAndSettle(inspectorChangeSettleTime);
 
       // Enable Inspector V2.
-      await toggleV2Inspector(tester);
+      await toggleLegacyInspector(tester);
       await tester.pumpAndSettle(inspectorChangeSettleTime);
 
       // Verify the legacy inspector is not visible.
@@ -665,10 +666,31 @@
   return expandCollapseButtonFinder;
 }
 
-Future<void> toggleV2Inspector(WidgetTester tester) async {
-  final inspectorSwitch = find.byType(DevToolsSwitch);
-  expect(inspectorSwitch, findsOneWidget);
-  await tester.tap(inspectorSwitch);
+Future<void> toggleLegacyInspector(WidgetTester tester) async {
+  // Open settings dialog.
+  final inspectorSettingsDialogButton = find.descendant(
+    of: find.byType(InspectorServiceExtensionButtonGroup),
+    matching: find.byType(SettingsOutlinedButton),
+  );
+  await tester.tap(inspectorSettingsDialogButton);
+  await tester.pumpAndSettle(inspectorChangeSettleTime);
+
+  // Toggle the "legacy Inspector" checkbox.
+  final settingsRow = find.ancestor(
+    of: find.richTextContaining('Use legacy inspector'),
+    matching: find.byType(Row),
+  );
+  final inspectorCheckbox = find.descendant(
+    of: settingsRow,
+    matching: find.byType(NotifierCheckbox),
+  );
+  await tester.tap(inspectorCheckbox);
+  await tester.pumpAndSettle(inspectorChangeSettleTime);
+
+  // Close the settings dialog.
+  final closeButton = find.byType(DialogCloseButton);
+  await tester.tap(closeButton);
+  await tester.pumpAndSettle(inspectorChangeSettleTime);
 }
 
 void verifyPropertyIsVisible({
diff --git a/packages/devtools_app/test/screens/inspector_v2/inspector_screen_test.dart b/packages/devtools_app/test/screens/inspector_v2/inspector_screen_test.dart
index b8bf8cb..a57efa4 100644
--- a/packages/devtools_app/test/screens/inspector_v2/inspector_screen_test.dart
+++ b/packages/devtools_app/test/screens/inspector_v2/inspector_screen_test.dart
@@ -74,8 +74,6 @@
     setGlobal(Storage, FlutterTestStorage());
     setGlobal(NotificationService, NotificationService());
     fakeServiceConnection.consoleService.ensureServiceInitialized();
-    // Enable the V2 inspector:
-    preferences.inspector.setInspectorV2Enabled(true);
   });
 
   Future<void> mockExtensions() async {
diff --git a/packages/devtools_app/test/test_infra/goldens/integration_animated_physical_model_selected.png b/packages/devtools_app/test/test_infra/goldens/integration_animated_physical_model_selected.png
index 5909a15..af266ce 100644
--- a/packages/devtools_app/test/test_infra/goldens/integration_animated_physical_model_selected.png
+++ b/packages/devtools_app/test/test_infra/goldens/integration_animated_physical_model_selected.png
Binary files differ
diff --git a/packages/devtools_app/test/test_infra/goldens/integration_inspector_errors_1_initial_load.png b/packages/devtools_app/test/test_infra/goldens/integration_inspector_errors_1_initial_load.png
index 05e6712..741a64d 100644
--- a/packages/devtools_app/test/test_infra/goldens/integration_inspector_errors_1_initial_load.png
+++ b/packages/devtools_app/test/test_infra/goldens/integration_inspector_errors_1_initial_load.png
Binary files differ
diff --git a/packages/devtools_app/test/test_infra/goldens/integration_inspector_errors_2_error_selected.png b/packages/devtools_app/test/test_infra/goldens/integration_inspector_errors_2_error_selected.png
index ace1bc1..b605477 100644
--- a/packages/devtools_app/test/test_infra/goldens/integration_inspector_errors_2_error_selected.png
+++ b/packages/devtools_app/test/test_infra/goldens/integration_inspector_errors_2_error_selected.png
Binary files differ
diff --git a/packages/devtools_app/test/test_infra/goldens/integration_inspector_initial_load.png b/packages/devtools_app/test/test_infra/goldens/integration_inspector_initial_load.png
index 14b261a..b3ec485 100644
--- a/packages/devtools_app/test/test_infra/goldens/integration_inspector_initial_load.png
+++ b/packages/devtools_app/test/test_infra/goldens/integration_inspector_initial_load.png
Binary files differ
diff --git a/packages/devtools_app/test/test_infra/goldens/integration_inspector_richtext_selected.png b/packages/devtools_app/test/test_infra/goldens/integration_inspector_richtext_selected.png
index 1717c24..91608fb 100644
--- a/packages/devtools_app/test/test_infra/goldens/integration_inspector_richtext_selected.png
+++ b/packages/devtools_app/test/test_infra/goldens/integration_inspector_richtext_selected.png
Binary files differ
diff --git a/packages/devtools_app/test/test_infra/goldens/integration_inspector_scaffold_selected.png b/packages/devtools_app/test/test_infra/goldens/integration_inspector_scaffold_selected.png
index a1ca966..53bac54 100644
--- a/packages/devtools_app/test/test_infra/goldens/integration_inspector_scaffold_selected.png
+++ b/packages/devtools_app/test/test_infra/goldens/integration_inspector_scaffold_selected.png
Binary files differ
diff --git a/packages/devtools_app/test/test_infra/goldens/integration_inspector_select_center.png b/packages/devtools_app/test/test_infra/goldens/integration_inspector_select_center.png
index 4138a90..99bcf67 100644
--- a/packages/devtools_app/test/test_infra/goldens/integration_inspector_select_center.png
+++ b/packages/devtools_app/test/test_infra/goldens/integration_inspector_select_center.png
Binary files differ
diff --git a/packages/devtools_app/test/test_infra/goldens/integration_inspector_select_center_details_tree.png b/packages/devtools_app/test/test_infra/goldens/integration_inspector_select_center_details_tree.png
index 69930de..8575c84 100644
--- a/packages/devtools_app/test/test_infra/goldens/integration_inspector_select_center_details_tree.png
+++ b/packages/devtools_app/test/test_infra/goldens/integration_inspector_select_center_details_tree.png
Binary files differ
diff --git a/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_errors_1_initial_load.png b/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_errors_1_initial_load.png
index aca4ff1..dba5bb0 100644
--- a/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_errors_1_initial_load.png
+++ b/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_errors_1_initial_load.png
Binary files differ
diff --git a/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_errors_2_error_selected.png b/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_errors_2_error_selected.png
index 06b74c5..1e4f85d 100644
--- a/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_errors_2_error_selected.png
+++ b/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_errors_2_error_selected.png
Binary files differ
diff --git a/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_hideable_widget_selected.png b/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_hideable_widget_selected.png
index 82e857b..1db7248 100644
--- a/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_hideable_widget_selected.png
+++ b/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_hideable_widget_selected.png
Binary files differ
diff --git a/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_hideable_widget_selected_from_search.png b/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_hideable_widget_selected_from_search.png
index 82e857b..1db7248 100644
--- a/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_hideable_widget_selected_from_search.png
+++ b/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_hideable_widget_selected_from_search.png
Binary files differ
diff --git a/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_implementation_widgets_collapsed.png b/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_implementation_widgets_collapsed.png
index cac1347..25fefb1 100644
--- a/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_implementation_widgets_collapsed.png
+++ b/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_implementation_widgets_collapsed.png
Binary files differ
diff --git a/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_implementation_widgets_expanded.png b/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_implementation_widgets_expanded.png
index 43b8a0b..5fc3b1c 100644
--- a/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_implementation_widgets_expanded.png
+++ b/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_implementation_widgets_expanded.png
Binary files differ
diff --git a/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_implementation_widgets_hidden.png b/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_implementation_widgets_hidden.png
index 491c101..88eb5b3 100644
--- a/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_implementation_widgets_hidden.png
+++ b/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_implementation_widgets_hidden.png
Binary files differ
diff --git a/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_initial_load.png b/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_initial_load.png
index 4e642d8..328f8ed 100644
--- a/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_initial_load.png
+++ b/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_initial_load.png
Binary files differ
diff --git a/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_revert_to_legacy.png b/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_revert_to_legacy.png
index 4138a90..99bcf67 100644
--- a/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_revert_to_legacy.png
+++ b/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_revert_to_legacy.png
Binary files differ
diff --git a/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_select_center.png b/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_select_center.png
index 8b466ac..cc9aa44 100644
--- a/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_select_center.png
+++ b/packages/devtools_app/test/test_infra/goldens/integration_inspector_v2_select_center.png
Binary files differ