checkCameraPermissionWeb method

Future<String> checkCameraPermissionWeb()

Implementation

Future<String> checkCameraPermissionWeb() async {
  try {
    // Check if mediaDevices API is available
    final mediaDevices = web.window.navigator.mediaDevices;

    // Try to enumerate devices to check camera availability
    try {
      final devices = await mediaDevices.enumerateDevices().toDart;
      bool hasCamera = false;
      for (int i = 0; i < devices.length; i++) {
        final device = devices[i];
        if (device.kind == 'videoinput') {
          hasCamera = true;
          break;
        }
      }

      if (!hasCamera) {
        return 'unsupported';
      }
    } catch (e) {
      // If enumerateDevices fails, camera might still be available
      debugPrint('Error enumerating devices: $e');
    }

    // Try to check permission status using Permissions API if available
    try {
      final permissions = web.window.navigator.permissions;
      final queryOptions = {'name': 'camera'}.jsify() as JSObject;
      final result = await permissions.query(queryOptions).toDart;
      final state = result.state;
      switch (state) {
        case 'granted':
          return 'granted';
        case 'denied':
          return 'denied';
        case 'prompt':
          return 'denied'; // Not yet requested
        default:
          return 'denied';
      }
    } catch (e) {
      debugPrint('Error checking camera permission via Permissions API: $e');
    }

    // Default fallback
    return 'denied';
  } catch (e) {
    debugPrint('Error checking camera permission: $e');
    return 'error';
  }
}