takeScreenshot method

Future<RPCResponse> takeScreenshot(
  1. Map<String, dynamic> params
)

Take a screenshot of the current UI

Implementation

Future<RPCResponse> takeScreenshot(final Map<String, dynamic> params) async {
  try {
    print('Take screenshot');
    if (!_serviceManager.connectedState.value.connected) {
      return RPCResponse.error('Not connected to VM service');
    }
    print('Take screenshot: connected');
    final isolateId = _serviceManager.isolateManager.mainIsolate.value?.id;
    if (isolateId == null) {
      print('Take screenshot: no isolateId');
      return RPCResponse.error('No main isolate available');
    }
    print('Take screenshot: isolateId: $isolateId');
    // Call the VM service to take a screenshot using the private Flutter API
    final result = await _serviceManager.service!.callServiceExtension(
      '_flutter.screenshot',
    );
    print('Take screenshot: has result');
    final screenshotData = result.json?['screenshot'] as String?;
    print(
      'Take screenshot: is screenshotData exists: ${screenshotData != null}',
    );
    if (screenshotData != null) {
      return RPCResponse.successString(screenshotData);
    } else {
      return RPCResponse.error('Screenshot data not available');
    }
  } catch (e, stackTrace) {
    return RPCResponse.error(
      'Error taking screenshot: $e, stackTrace: $stackTrace',
    );
  }
}