通过在扫描仪对话框中启用自动缩放和改进错误处理来重构QR码扫描功能。更新ScanQrCodePage以利用AppQrScannerDialog获取玩家ID。
This commit is contained in:
@@ -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<ScanQrCodePage> {
|
||||
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(
|
||||
|
||||
@@ -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