| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- 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/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<CheckinPage> createState() => _CheckinPageState();
- }
- class _CheckinPageState extends State<CheckinPage> {
- Future<String?> _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<void> _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: QRScannerComponent(
- startWithString: _qrCodePrefix,
- onScanCallback: _performCheckin,
- invalidQRMessage: '签到二维码无效!',
- qrCodeParser: _parseCheckinQRCode,
- ),
- );
- }
- }
|