Files
nowser/lib/component/qrscanner.dart
2024-09-18 14:17:50 +08:00

66 lines
1.5 KiB
Dart

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:qr_code_scanner/qr_code_scanner.dart';
import '../util/router_util.dart';
class QRScanner extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _QRScanner();
}
static Future<String?> show(BuildContext context) async {
return await RouterUtil.push(context, MaterialPageRoute(builder: (context) {
return QRScanner();
}));
}
}
class _QRScanner extends State<QRScanner> {
final GlobalKey qrKey = GlobalKey(debugLabel: 'QR');
Barcode? result;
QRViewController? controller;
// In order to get hot reload to work we need to pause the camera if the platform
// is android, or resume the camera if the platform is iOS.
@override
void reassemble() {
super.reassemble();
if (Platform.isAndroid) {
controller!.pauseCamera();
} else if (Platform.isIOS) {
controller!.resumeCamera();
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: QRView(
key: qrKey,
onQRViewCreated: _onQRViewCreated,
),
);
}
bool scanComplete = false;
void _onQRViewCreated(QRViewController controller) {
this.controller = controller;
controller.scannedDataStream.listen((scanData) {
if (!scanComplete) {
scanComplete = true;
RouterUtil.back(context, scanData.code);
}
});
}
@override
void dispose() {
controller?.dispose();
super.dispose();
}
}