sample_query_page.dart 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import 'package:chicken_farm/routes/app_routes.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:chicken_farm/components/vb_app_bar.dart';
  4. import 'package:chicken_farm/components/qr_scanner.dart';
  5. import 'package:go_router/go_router.dart';
  6. class SampleQueryPage extends StatefulWidget {
  7. const SampleQueryPage({super.key});
  8. @override
  9. State<SampleQueryPage> createState() => _SampleQueryPageState();
  10. }
  11. const String _qrCodePrefix = 'vb@sample@/sample/';
  12. class _SampleQueryPageState extends State<SampleQueryPage> {
  13. Future<String?> _parseSampleQRCode(String rawContent) async {
  14. try {
  15. // 替换掉 _qrCodePrefix
  16. final content = rawContent.replaceFirst(_qrCodePrefix, '');
  17. if (content.isNotEmpty) {
  18. // 检查是否能转成int,能转就返回conetent,不能返回null
  19. return int.parse(content).toString();
  20. }
  21. return null;
  22. } catch (e) {
  23. return null;
  24. }
  25. }
  26. void _handleSampleScan(String scannedContent) async {
  27. // 跳转到样品详情页面,传递id参数为scannedContent
  28. if (mounted) {
  29. context.pushNamed(
  30. AppRouteNames.sampleDetail,
  31. pathParameters: {'id': scannedContent},
  32. );
  33. }
  34. }
  35. @override
  36. Widget build(BuildContext context) {
  37. return Scaffold(
  38. appBar: const VberAppBar(title: '样品查询', showLeftButton: true),
  39. body: QRScannerComponent(
  40. startWithString: _qrCodePrefix,
  41. onScanCallback: _handleSampleScan,
  42. invalidQRMessage: '样品二维码无效!',
  43. qrCodeParser: _parseSampleQRCode,
  44. ),
  45. );
  46. }
  47. }