73 lines
2.3 KiB
Dart

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<XRWithQRScannerPage> {
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<void> fetchData(String? qrCode) async {
print('Fetching data for QR Code: $qrCode');
}
}