import 'package:flutter/material.dart'; import 'package:qr_code_scanner/qr_code_scanner.dart'; import 'package:webview_flutter/webview_flutter.dart'; class XRWithQRScannerPage extends StatefulWidget { @override _XRWithQRScannerPageState createState() => _XRWithQRScannerPageState(); } class _XRWithQRScannerPageState extends State { String qrCode = ""; late final WebViewController _webViewController; final GlobalKey qrKey = GlobalKey(debugLabel: 'QR'); @override void initState() { super.initState(); _webViewController = WebViewController() ..setJavaScriptMode(JavaScriptMode.unrestricted) ..loadRequest(Uri.parse("https://immersive-web.github.io/webxr-samples/immersive-ar-session.html")) ; //..loadFlutterAsset('assets/files/xr_environment.html'); // Charge le fichier local } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text("XR avec Scanner QR Code")), body: Stack( children: [ // La couche QR code scanner (superposée au-dessus de l'XR) Positioned.fill( child: QRView( onQRViewCreated: (controller) { controller.scannedDataStream.listen((scanData) { setState(() { qrCode = scanData.code!; print('QR Code détecté : $qrCode'); fetchData(qrCode); }); }); }, key: qrKey, ), ), // La couche XR (WebXR avec Three.js ou autre moteur) WebViewWidget( controller: _webViewController ..setJavaScriptMode(JavaScriptMode.unrestricted) ..setBackgroundColor(Color(0x00000000)) ..addJavaScriptChannel( 'WebViewChannel', onMessageReceived: (message) { // Message reçu de JavaScript print(message.message); showDialog( context: context, builder: (context) => AlertDialog( content: Text(message.message), ), ); }, ), ), ], ), ); } Future fetchData(String? qrCode) async { print('Fetching data for QR Code: $qrCode'); } }