import 'package:chicken_farm/core/utils/logger.dart'; import 'package:chicken_farm/routes/app_routes.dart'; import 'package:flutter/material.dart'; import 'package:chicken_farm/components/vb_app_bar.dart'; import 'package:chicken_farm/components/vb_qr_scanner.dart'; import 'package:go_router/go_router.dart'; const String _qrCodePrefix = 'vb@device@/checkin/'; class CheckinPage extends StatefulWidget { const CheckinPage({super.key}); @override State createState() => _CheckinPageState(); } class _CheckinPageState extends State { Future _parseCheckinQRCode(String rawContent) async { try { // 替换掉 _qrCodePrefix final content = rawContent.replaceFirst(_qrCodePrefix, ''); logger.d('parseCheckinQRCode: $content rawContent: $rawContent'); if (content.isNotEmpty) { // 检查是否能转成int,能转就返回conetent,不能返回null return int.parse(content).toString(); } return null; } catch (e) { return null; } } Future _performCheckin(String scannedContent) async { // 跳转到签到记录页面 ,传递id参数为scannedContent(查询这个id的签到记录) if (context.mounted) { context.pushNamed( AppRouteNames.checkinRecord, pathParameters: {'id': scannedContent}, ); } } @override Widget build(BuildContext context) { return Scaffold( appBar: const VberAppBar(title: '点检签到', showLeftButton: true), body: VberQRScanner( startWithString: _qrCodePrefix, onScanCallback: _performCheckin, invalidQRMessage: '签到二维码无效!', qrCodeParser: _parseCheckinQRCode, ), ); } }