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,