通过在扫描仪对话框中启用自动缩放和改进错误处理来重构QR码扫描功能。更新ScanQrCodePage以利用AppQrScannerDialog获取玩家ID。
This commit is contained in:
@@ -41,6 +41,7 @@ class _AppQrScannerDialogState extends State<AppQrScannerDialog>
|
||||
detectionSpeed: DetectionSpeed.noDuplicates,
|
||||
facing: CameraFacing.back,
|
||||
formats: const [BarcodeFormat.qrCode],
|
||||
autoZoom: true,
|
||||
);
|
||||
_scanLineController = AnimationController(
|
||||
vsync: this,
|
||||
@@ -59,25 +60,36 @@ class _AppQrScannerDialogState extends State<AppQrScannerDialog>
|
||||
if (_hasScanned || capture.barcodes.isEmpty) return;
|
||||
|
||||
final value = capture.barcodes.first.rawValue;
|
||||
print('value:$value');
|
||||
return;
|
||||
|
||||
if (value == null || value.isEmpty) return;
|
||||
|
||||
_hasScanned = true;
|
||||
final navigator = Navigator.of(context, rootNavigator: true);
|
||||
debugPrint('扫码结果: $value');
|
||||
if (!mounted) return;
|
||||
if (navigator.canPop()) {
|
||||
navigator.pop(value);
|
||||
}
|
||||
unawaited(_stopScanner());
|
||||
}
|
||||
|
||||
void _handleDetectError(Object error, StackTrace stackTrace) {
|
||||
debugPrint('扫码识别失败: $error');
|
||||
}
|
||||
|
||||
Future<void> _stopScanner() async {
|
||||
try {
|
||||
await _controller.stop();
|
||||
} catch (error) {
|
||||
debugPrint('停止扫码相机失败: $error');
|
||||
}
|
||||
|
||||
if (!mounted) return;
|
||||
navigator.pop(value);
|
||||
}
|
||||
|
||||
void _close() {
|
||||
Navigator.of(context, rootNavigator: true).pop();
|
||||
if (!mounted) return;
|
||||
final navigator = Navigator.of(context, rootNavigator: true);
|
||||
if (navigator.canPop()) {
|
||||
navigator.pop();
|
||||
}
|
||||
}
|
||||
|
||||
Rect _scanWindowFor(Size size) {
|
||||
@@ -101,8 +113,8 @@ class _AppQrScannerDialogState extends State<AppQrScannerDialog>
|
||||
child: MobileScanner(
|
||||
controller: _controller,
|
||||
fit: BoxFit.cover,
|
||||
scanWindow: scanWindow,
|
||||
onDetect: _handleDetect,
|
||||
onDetectError: _handleDetectError,
|
||||
errorBuilder: _buildCameraError,
|
||||
placeholderBuilder: (_) => const ColoredBox(
|
||||
color: Colors.black,
|
||||
|
||||
Reference in New Issue
Block a user