mirror of
https://github.com/haorendashu/nowser.git
synced 2025-12-17 09:54:19 +01:00
66 lines
1.5 KiB
Dart
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();
|
|
}
|
|
}
|