From fab49a97503e1f76ae95d187489fd66f6217233e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E9=94=8B?= <2535831261@qq.com> Date: Thu, 9 Jul 2026 17:56:17 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=9A=E8=BF=87=E5=9C=A8=E6=89=AB=E6=8F=8F?= =?UTF-8?q?=E4=BB=AA=E5=AF=B9=E8=AF=9D=E6=A1=86=E4=B8=AD=E5=90=AF=E7=94=A8?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E7=BC=A9=E6=94=BE=E5=92=8C=E6=94=B9=E8=BF=9B?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E5=A4=84=E7=90=86=E6=9D=A5=E9=87=8D=E6=9E=84?= =?UTF-8?q?QR=E7=A0=81=E6=89=AB=E6=8F=8F=E5=8A=9F=E8=83=BD=E3=80=82?= =?UTF-8?q?=E6=9B=B4=E6=96=B0ScanQrCodePage=E4=BB=A5=E5=88=A9=E7=94=A8AppQ?= =?UTF-8?q?rScannerDialog=E8=8E=B7=E5=8F=96=E7=8E=A9=E5=AE=B6ID=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scan_qrcode/pages/page_scan_qrcode.dart | 10 +++---- lib/shared/widgets/app_qr_scanner_dialog.dart | 28 +++++++++++++------ 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/lib/features/scan_qrcode/pages/page_scan_qrcode.dart b/lib/features/scan_qrcode/pages/page_scan_qrcode.dart index 844f32f..16e6be4 100644 --- a/lib/features/scan_qrcode/pages/page_scan_qrcode.dart +++ b/lib/features/scan_qrcode/pages/page_scan_qrcode.dart @@ -5,6 +5,7 @@ import 'package:recording_tool/features/events/pages/page_event_info.dart'; import 'package:recording_tool/features/recording/model/model_recording_context.dart'; import 'package:recording_tool/shared/widgets/app_bar.dart'; import 'package:recording_tool/shared/widgets/app_button.dart'; +import 'package:recording_tool/shared/widgets/app_qr_scanner_dialog.dart'; class ScanQrCodePage extends StatefulWidget { const ScanQrCodePage({super.key}); @@ -49,11 +50,10 @@ class _AuthPageWidgetState extends State { child: AppButton( label: '扫码', onPressed: () async { - // final String? playerId = await AppQrScannerDialog.show( - // context, - // ); - // if (playerId == null || playerId.isEmpty) return; - // debugPrint('扫码结果: $playerId'); + final String? playerId = await AppQrScannerDialog.show( + context, + ); + if (playerId == null || playerId.isEmpty) return; /// TODO AppNavigator.push( diff --git a/lib/shared/widgets/app_qr_scanner_dialog.dart b/lib/shared/widgets/app_qr_scanner_dialog.dart index fe91094..b1142d8 100644 --- a/lib/shared/widgets/app_qr_scanner_dialog.dart +++ b/lib/shared/widgets/app_qr_scanner_dialog.dart @@ -41,6 +41,7 @@ class _AppQrScannerDialogState extends State detectionSpeed: DetectionSpeed.noDuplicates, facing: CameraFacing.back, formats: const [BarcodeFormat.qrCode], + autoZoom: true, ); _scanLineController = AnimationController( vsync: this, @@ -59,25 +60,36 @@ class _AppQrScannerDialogState extends State 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 _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 child: MobileScanner( controller: _controller, fit: BoxFit.cover, - scanWindow: scanWindow, onDetect: _handleDetect, + onDetectError: _handleDetectError, errorBuilder: _buildCameraError, placeholderBuilder: (_) => const ColoredBox( color: Colors.black,