fromCardboardQrUri static method
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],
);
}