diff --git a/packages/flutter/lib/src/widgets/widget_inspector.dart b/packages/flutter/lib/src/widgets/widget_inspector.dart index 3583fa04d5..616be4a298 100644 --- a/packages/flutter/lib/src/widgets/widget_inspector.dart +++ b/packages/flutter/lib/src/widgets/widget_inspector.dart @@ -1090,7 +1090,7 @@ mixin WidgetInspectorService { getter: () async => WidgetsBinding.instance.debugShowWidgetInspectorOverride, setter: (bool value) { if (WidgetsBinding.instance.debugShowWidgetInspectorOverride != value) { - WidgetsBinding.instance.debugShowWidgetInspectorOverride = value; + _changeWidgetSelectionMode(value, notifyStateChange: false); } return Future.value(); }, @@ -1633,9 +1633,15 @@ mixin WidgetInspectorService { } /// Changes whether widget selection mode is [enabled]. - void _changeWidgetSelectionMode(bool enabled) { + void _changeWidgetSelectionMode(bool enabled, {bool notifyStateChange = true}) { WidgetsBinding.instance.debugShowWidgetInspectorOverride = enabled; - _postExtensionStateChangedEvent(WidgetInspectorServiceExtensions.show.name, enabled); + if (notifyStateChange) { + _postExtensionStateChangedEvent(WidgetInspectorServiceExtensions.show.name, enabled); + } + if (!enabled) { + // If turning off selection mode, clear the current selection. + selection.currentElement = null; + } } /// Returns a DevTools uri linking to a specific element on the inspector page. @@ -3056,7 +3062,7 @@ class InspectorSelection with ChangeNotifier { } if (currentElement != element) { _currentElement = element; - _current = element!.findRenderObject(); + _current = element?.findRenderObject(); notifyListeners(); } } diff --git a/packages/flutter/test/widgets/widget_inspector_test.dart b/packages/flutter/test/widgets/widget_inspector_test.dart index 9b3cacd133..1400d38ee4 100644 --- a/packages/flutter/test/widgets/widget_inspector_test.dart +++ b/packages/flutter/test/widgets/widget_inspector_test.dart @@ -502,15 +502,8 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { await tester.tap(find.byKey(exitWidgetSelectionButtonKey)); await tester.pump(); - // Tap on the top button and verify it is not selected in the Inspector. - await tester.tap(find.text('TOP')); - expect(log, equals(['top'])); - - // Ensure the inspector selection is still BOTTOM (not TOP). - expect( - paragraphText(WidgetInspectorService.instance.selection.current! as RenderParagraph), - equals('BOTTOM'), - ); + // Ensure the inspector selection is now cleared. + expect(WidgetInspectorService.instance.selection.current, isNull); }); testWidgets('WidgetInspector non-invertible transform regression test', (