通过在扫描仪对话框中启用自动缩放和改进错误处理来重构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/features/recording/model/model_recording_context.dart';
|
||||||
import 'package:recording_tool/shared/widgets/app_bar.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_button.dart';
|
||||||
|
import 'package:recording_tool/shared/widgets/app_qr_scanner_dialog.dart';
|
||||||
|
|
||||||
class ScanQrCodePage extends StatefulWidget {
|
class ScanQrCodePage extends StatefulWidget {
|
||||||
const ScanQrCodePage({super.key});
|
const ScanQrCodePage({super.key});
|
||||||
@@ -49,11 +50,10 @@ class _AuthPageWidgetState extends State<ScanQrCodePage> {
|
|||||||
child: AppButton(
|
child: AppButton(
|
||||||
label: '扫码',
|
label: '扫码',
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
// final String? playerId = await AppQrScannerDialog.show(
|
final String? playerId = await AppQrScannerDialog.show(
|
||||||
// context,
|
context,
|
||||||
// );
|
);
|
||||||
// if (playerId == null || playerId.isEmpty) return;
|
if (playerId == null || playerId.isEmpty) return;
|
||||||
// debugPrint('扫码结果: $playerId');
|
|
||||||
|
|
||||||
/// TODO
|
/// TODO
|
||||||
AppNavigator.push(
|
AppNavigator.push(
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ class _AppQrScannerDialogState extends State<AppQrScannerDialog>
|
|||||||
detectionSpeed: DetectionSpeed.noDuplicates,
|
detectionSpeed: DetectionSpeed.noDuplicates,
|
||||||
facing: CameraFacing.back,
|
facing: CameraFacing.back,
|
||||||
formats: const [BarcodeFormat.qrCode],
|
formats: const [BarcodeFormat.qrCode],
|
||||||
|
autoZoom: true,
|
||||||
);
|
);
|
||||||
_scanLineController = AnimationController(
|
_scanLineController = AnimationController(
|
||||||
vsync: this,
|
vsync: this,
|
||||||
@@ -59,25 +60,36 @@ class _AppQrScannerDialogState extends State<AppQrScannerDialog>
|
|||||||
if (_hasScanned || capture.barcodes.isEmpty) return;
|
if (_hasScanned || capture.barcodes.isEmpty) return;
|
||||||
|
|
||||||
final value = capture.barcodes.first.rawValue;
|
final value = capture.barcodes.first.rawValue;
|
||||||
print('value:$value');
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (value == null || value.isEmpty) return;
|
if (value == null || value.isEmpty) return;
|
||||||
|
|
||||||
_hasScanned = true;
|
_hasScanned = true;
|
||||||
final navigator = Navigator.of(context, rootNavigator: 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 {
|
try {
|
||||||
await _controller.stop();
|
await _controller.stop();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
debugPrint('停止扫码相机失败: $error');
|
debugPrint('停止扫码相机失败: $error');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mounted) return;
|
|
||||||
navigator.pop(value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void _close() {
|
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) {
|
Rect _scanWindowFor(Size size) {
|
||||||
@@ -101,8 +113,8 @@ class _AppQrScannerDialogState extends State<AppQrScannerDialog>
|
|||||||
child: MobileScanner(
|
child: MobileScanner(
|
||||||
controller: _controller,
|
controller: _controller,
|
||||||
fit: BoxFit.cover,
|
fit: BoxFit.cover,
|
||||||
scanWindow: scanWindow,
|
|
||||||
onDetect: _handleDetect,
|
onDetect: _handleDetect,
|
||||||
|
onDetectError: _handleDetectError,
|
||||||
errorBuilder: _buildCameraError,
|
errorBuilder: _buildCameraError,
|
||||||
placeholderBuilder: (_) => const ColoredBox(
|
placeholderBuilder: (_) => const ColoredBox(
|
||||||
color: Colors.black,
|
color: Colors.black,
|
||||||
|
|||||||
Reference in New Issue
Block a user