通过在扫描仪对话框中启用自动缩放和改进错误处理来重构QR码扫描功能。更新ScanQrCodePage以利用AppQrScannerDialog获取玩家ID。

This commit is contained in:
2026-07-09 17:56:17 +08:00
parent 1c909277ff
commit fab49a9750
2 changed files with 25 additions and 13 deletions
+20 -8
View File
@@ -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,