group manager
diff --git a/packages/devtools_app/lib/src/inspector/flutter/inspector_screen_details_tab.dart b/packages/devtools_app/lib/src/inspector/flutter/inspector_screen_details_tab.dart
index 07ac47b..1bf96de 100644
--- a/packages/devtools_app/lib/src/inspector/flutter/inspector_screen_details_tab.dart
+++ b/packages/devtools_app/lib/src/inspector/flutter/inspector_screen_details_tab.dart
@@ -2,11 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import 'package:devtools_app/src/inspector/diagnostics_node.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/rendering.dart';
 import 'package:flutter/widgets.dart';
 
 import '../inspector_controller.dart';
+import '../inspector_service.dart';
 import '../inspector_tree.dart';
 import 'inspector_data_models.dart';
 import 'story_of_your_layout/flex.dart';
@@ -100,23 +102,50 @@
 
   InspectorTreeNode get selected => controller?.selectedNode;
 
-  Future<void> loadRenderObject() async {
-    final nearestFlex = selected.diagnostic.isFlex
-        ? selected.diagnostic
-        : selected.parent.diagnostic;
-    await nearestFlex.getRenderObject();
-  }
+  InspectorObjectGroupManager objectGroupManager;
+
+  RemoteDiagnosticsNode root;
 
   void onSelectionChanged() async {
-    await loadRenderObject();
+    objectGroupManager.cancelNext();
+    setState(() {
+      root = null;
+    });
+    final nextObjectGroup = objectGroupManager.next;
+    if (selected?.diagnostic ?? false) {
+      final root = await nextObjectGroup.getDetailsSubtree(
+        selected?.diagnostic,
+        subtreeDepth: 1,
+      );
+      if (!nextObjectGroup.disposed) {
+        assert(objectGroupManager.next == nextObjectGroup);
+        objectGroupManager.promoteNext();
+      }
+    }
     setState(() {});
   }
 
   @override
   void initState() {
     super.initState();
+    updateObjectGroupManager();
     controller.addSelectionListener(onSelectionChanged);
-    loadRenderObject();
+  }
+
+  void updateObjectGroupManager() {
+    final service = controller.inspectorService;
+    if (service != objectGroupManager?.inspectorService) {
+      objectGroupManager = InspectorObjectGroupManager(
+        service,
+        'flex-layout',
+      );
+    }
+  }
+
+  @override
+  void didUpdateWidget(Widget oldWidget) {
+    super.didUpdateWidget(oldWidget);
+    updateObjectGroupManager();
   }
 
   @override