requestScreenShare function
Requests permission to start screen sharing or initiates screen sharing if in local UI mode.
This function configures screen resolution settings, checks if screen sharing is allowed via a socket event, and initiates screen sharing based on the response.
Parameters:
options
(RequestScreenShareOptions
): Contains parameters for requesting and starting screen sharing, including the socket connection, alert function, and resolution settings.
The function supports two modes:
- Local UI Mode: Directly starts screen sharing without permission checks.
- Network Mode: Emits a socket event to check if screen sharing is allowed before starting.
Example:
final options = RequestScreenShareOptions(
parameters: RequestScreenShareParameters(
socket: socketInstance,
showAlert: (String message, String type, int duration) => print(message),
localUIMode: false,
targetResolution: 'fhd',
startShareScreen: startShareScreenFunction,
getUpdatedAllParams: () => this, // Replace with actual updated params implementation
),
);
await requestScreenShare(options);
Implementation
Future<void> requestScreenShare(
RequestScreenShareOptions options,
) async {
// Retrieve and update parameters
var parameters = options.parameters.getUpdatedAllParams();
final socket = parameters.socket;
final ShowAlert? showAlert = parameters.showAlert;
final bool localUIMode = parameters.localUIMode;
final StartShareScreenType startShareScreen = parameters.startShareScreen;
// Default to 'hd' resolution
var targetWidth = 1280;
var targetHeight = 720;
final targetResolution = parameters.targetResolution;
final targetResolutionHost = parameters.targetResolutionHost;
// Set resolution based on target
if (targetResolution == 'qhd' || targetResolutionHost == 'qhd') {
targetWidth = 2560;
targetHeight = 1440;
} else if (targetResolution == 'fhd' || targetResolutionHost == 'fhd') {
targetWidth = 1920;
targetHeight = 1080;
}
try {
// Directly start screen sharing if in local UI mode
if (localUIMode == true) {
final optionsStartShareScreen = StartShareScreenOptions(
parameters: parameters,
targetWidth: targetWidth,
targetHeight: targetHeight,
);
await startShareScreen(optionsStartShareScreen);
return;
}
// Otherwise, emit a socket event to request screen sharing permission
socket!.emitWithAck('requestScreenShare', [], ack: (responseData) async {
final bool allowScreenShare = responseData['allowScreenShare'] ?? false;
if (!allowScreenShare) {
// Show alert if sharing is not allowed
showAlert?.call(
message: 'You are not allowed to share screen',
type: 'danger',
duration: 3000,
);
} else {
// Start sharing if allowed
var updatedParams = parameters;
final optionsStartShareScreen = StartShareScreenOptions(
parameters: updatedParams,
targetWidth: targetWidth,
targetHeight: targetHeight,
);
await startShareScreen(optionsStartShareScreen);
}
});
} catch (error) {
// Log any errors encountered
if (kDebugMode) {
print("Error during requesting screen share: $error");
}
}
}