getRootWidget method

Future<RPCResponse> getRootWidget()

Implementation

Future<RPCResponse> getRootWidget() async {
  final treeManager = _treeGroupManager;
  if (treeManager == null) {
    return RPCResponse.error('Service is not connected.');
  }

  final group = treeManager.next;

  try {
    final callMethodName =
        '$flutterInspectorName.'
        '${WidgetInspectorServiceExtensions.getRootWidgetTree.name}';
    final rootWidgetTree = await serviceManager
        .callServiceExtensionOnMainIsolate(
          callMethodName,
          args: {
            'groupName': group.groupName,
            'isSummaryTree': 'true',
            'withPreviews': 'false',
            'fullDetails': 'false',
          },
        );
    print('Root widget tree: $rootWidgetTree');
    if (rootWidgetTree.json == null) {
      await treeManager.cancelNext();
      return RPCResponse.error(
        'Root widget tree not available, '
        'rootWidgetTree: ${rootWidgetTree.toJson()}',
      );
    }

    if (group.disposed) {
      // Handle cancellation
      print('Object group disposed, handling cancellation');
      return RPCResponse.error('Object group disposed');
    }

    await treeManager.promoteNext();
    return RPCResponse.successMap(rootWidgetTree.json!);
  } catch (e, stackTrace) {
    print('Error getting root widget tree: $e');
    print('Stack trace: $stackTrace');
    await _treeGroupManager?.cancelNext();
    return RPCResponse.error(
      'Error getting root widget tree: $e',
      stackTrace,
    );
  }
}