Skip to content

Commit acb2889

Browse files
authored
Scroll to selected node after switching inspectors (#8379)
1 parent 1190641 commit acb2889

File tree

1 file changed

+20
-1
lines changed

1 file changed

+20
-1
lines changed

packages/devtools_app/lib/src/screens/inspector_v2/inspector_tree_controller.dart

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -577,7 +577,7 @@ class InspectorTreeController extends DisposableController
577577

578578
void scrollToRect(Rect targetRect) {
579579
for (final client in _clients) {
580-
client.scrollToRect(targetRect);
580+
client.waitForClientsThenScrollToRect(targetRect);
581581
}
582582
}
583583

@@ -853,6 +853,8 @@ extension RemoteDiagnosticsNodeExtension on RemoteDiagnosticsNode {
853853
abstract class InspectorControllerClient {
854854
void scrollToRect(Rect rect);
855855

856+
void waitForClientsThenScrollToRect(Rect rect, {int retries});
857+
856858
void requestFocus();
857859
}
858860

@@ -916,6 +918,10 @@ class _InspectorTreeState extends State<InspectorTree>
916918
readyWhen: (triggerValue) => !triggerValue,
917919
);
918920
}
921+
922+
WidgetsBinding.instance.addPostFrameCallback((_) {
923+
controller.animateTo(controller.selectedNode.value);
924+
});
919925
}
920926

921927
@override
@@ -964,6 +970,19 @@ class _InspectorTreeState extends State<InspectorTree>
964970
// );
965971
// }
966972

973+
@override
974+
Future<void> waitForClientsThenScrollToRect(
975+
Rect rect, {
976+
int retries = 5,
977+
}) async {
978+
if (_scrollControllerY.hasClients || _scrollControllerX.hasClients) {
979+
return scrollToRect(rect);
980+
}
981+
if (retries == 0) return;
982+
await Future.delayed(const Duration(milliseconds: 20));
983+
return waitForClientsThenScrollToRect(rect, retries: retries - 1);
984+
}
985+
967986
@override
968987
Future<void> scrollToRect(Rect rect) async {
969988
if (rect == _currentAnimateTarget) {

0 commit comments

Comments
 (0)