Clear selection state when exiting select mode (#161267)

Fixes https://github.com/flutter/devtools/issues/8654
This commit is contained in:
Elliott Brooks 2025-01-07 15:40:11 -08:00 committed by GitHub
parent 4b23b81828
commit 322f7af5fb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 12 additions and 13 deletions

View File

@ -1090,7 +1090,7 @@ mixin WidgetInspectorService {
getter: () async => WidgetsBinding.instance.debugShowWidgetInspectorOverride, getter: () async => WidgetsBinding.instance.debugShowWidgetInspectorOverride,
setter: (bool value) { setter: (bool value) {
if (WidgetsBinding.instance.debugShowWidgetInspectorOverride != value) { if (WidgetsBinding.instance.debugShowWidgetInspectorOverride != value) {
WidgetsBinding.instance.debugShowWidgetInspectorOverride = value; _changeWidgetSelectionMode(value, notifyStateChange: false);
} }
return Future<void>.value(); return Future<void>.value();
}, },
@ -1633,9 +1633,15 @@ mixin WidgetInspectorService {
} }
/// Changes whether widget selection mode is [enabled]. /// Changes whether widget selection mode is [enabled].
void _changeWidgetSelectionMode(bool enabled) { void _changeWidgetSelectionMode(bool enabled, {bool notifyStateChange = true}) {
WidgetsBinding.instance.debugShowWidgetInspectorOverride = enabled; 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. /// Returns a DevTools uri linking to a specific element on the inspector page.
@ -3056,7 +3062,7 @@ class InspectorSelection with ChangeNotifier {
} }
if (currentElement != element) { if (currentElement != element) {
_currentElement = element; _currentElement = element;
_current = element!.findRenderObject(); _current = element?.findRenderObject();
notifyListeners(); notifyListeners();
} }
} }

View File

@ -502,15 +502,8 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService {
await tester.tap(find.byKey(exitWidgetSelectionButtonKey)); await tester.tap(find.byKey(exitWidgetSelectionButtonKey));
await tester.pump(); await tester.pump();
// Tap on the top button and verify it is not selected in the Inspector. // Ensure the inspector selection is now cleared.
await tester.tap(find.text('TOP')); expect(WidgetInspectorService.instance.selection.current, isNull);
expect(log, equals(<String>['top']));
// Ensure the inspector selection is still BOTTOM (not TOP).
expect(
paragraphText(WidgetInspectorService.instance.selection.current! as RenderParagraph),
equals('BOTTOM'),
);
}); });
testWidgets('WidgetInspector non-invertible transform regression test', ( testWidgets('WidgetInspector non-invertible transform regression test', (