fromCardboardQrUri static method

DeviceParams fromCardboardQrUri(
  1. Uri uri
)

Decodes Google Cardboard QR configuration parameters from URI string. Decodes official Cardboard Protobuf payloads in ?p= as well as custom query parameters.

Implementation

static DeviceParams fromCardboardQrUri(Uri uri) {
  final params = uri.queryParameters;

  // Check if official Cardboard base64 protobuf ?p= parameter is present
  if (params.containsKey('p')) {
    try {
      final rawBase64 = params['p']!
          .replaceAll('-', '+')
          .replaceAll('_', '/');
      final padded = rawBase64.padRight((rawBase64.length + 3) & ~3, '=');
      final bytes = base64Decode(padded);
      return _parseProtobufCardboardParams(bytes);
    } catch (_) {
      // Fallback to query parameters if protobuf parsing fails
    }
  }

  final vendor = params['v'] ?? 'Custom';
  final model = params['m'] ?? 'VR Viewer';
  final interLens = double.tryParse(params['ipd'] ?? '') ?? 0.064;
  final screenLens = double.tryParse(params['std'] ?? '') ?? 0.042;
  final k1 = double.tryParse(params['k1'] ?? '') ?? 0.34;
  final k2 = double.tryParse(params['k2'] ?? '') ?? 0.55;

  return DeviceParams(
    vendor: vendor,
    model: model,
    interLensDistance: interLens,
    screenToLensDistance: screenLens,
    distortionCoefficients: [k1, k2],
  );
}