getQrCode method
Implementation
@override
Future<QrCodeImage?> getQrCode() async {
try {
if (Platform.isWindows) {
final hasCanvas = await evaluateJs(
"document.querySelector('canvas') != null",
tryPromise: false,
) ==
true;
if (!hasCanvas) {
await Future.delayed(const Duration(seconds: 5));
}
}
final result = await evaluateJs(
'''
(async function() {
try {
const canvas = document.querySelector('canvas');
if (!canvas) return null;
// Wait for canvas content if it's empty
if (canvas.width <= 1 || canvas.height <= 1) {
await new Promise(resolve => setTimeout(resolve, 1000));
}
const selectorUrl = canvas.closest('[data-ref]');
return {
'base64Image': canvas.toDataURL(),
'urlCode': selectorUrl ? selectorUrl.getAttribute('data-ref') : null,
};
} catch(e) {
return null;
}
})()
''',
tryPromise: true,
);
if (result == null || result is! Map) return null;
return QrCodeImage(
base64Image: result['base64Image'],
urlCode: result['urlCode'],
);
} catch (e) {
WhatsappLogger.log("QrCodeFetchingError: $e");
return null;
}
}