import 'dart:io'; import 'package:flutter/material.dart'; import 'package:lszlgl/page/sample_task/reap_sample_detail/reap_sample_task_page.dart'; import 'package:qr_code_scanner/qr_code_scanner.dart'; import '../../base/base_lifecycle_state.dart'; import '../../widget/button.dart'; class QrCodeScanPage extends StatefulWidget { const QrCodeScanPage({super.key}); @override State createState() => _QrCodeScanPageState(); } class _QrCodeScanPageState extends BaseLifecycleState { final GlobalKey qrKey = GlobalKey(debugLabel: 'QR'); Barcode? result; QRViewController? controller; void _onQRViewCreated(QRViewController controller) { this.controller = controller; controller.scannedDataStream.listen((scanData) { debugPrint('code:${scanData.code} format:${scanData.format} rawBytes:${scanData.rawBytes}'); controller.pauseCamera(); parseCode(scanData); }); } void parseCode(Barcode data) { String code = data.code ?? ''; if (code.isEmpty) { showErrorDialog('内容为空,请扫描正确二维码'); return; } // 121.36.17.6:19090/admin-api/zj/code-sampling-task-details-sgjc/getSamplingTaskDetails?id=47106 List split = code.split('?'); if (!code.contains('?') || split.length <= 1 || !split[0].contains('/')) { showErrorDialog(code); return; } String api = split[0].split('/').last; Map params = {}; for (String value in split[1].split('&')) { List kv = value.split('='); params[kv[0]] = kv[1]; } switch (api) { case 'getSamplingTaskDetails': // 收获扦样详情 if (params['id'] == null) { showErrorDialog(code); return; } MyRouter.startReapSampleTask( args: ReapSampleTaskPageArgs(id: num.parse(params['id']!), detail: true), replace: true, ); default: showErrorDialog(code); } } void showErrorDialog(String msg) async { await showDialog( context: context, builder: (_) => AlertDialog( title: Text(msg), actions: [MyButton('确定', alignment: null, onTap: () => MyNavigator.pop())], ), ); controller?.resumeCamera(); } // In order to get hot reload to work we need to pause the camera if the platform // is android, or resume the camera if the platform is iOS. @override void reassemble() { super.reassemble(); if (Platform.isAndroid) { controller!.pauseCamera(); } else if (Platform.isIOS) { controller!.resumeCamera(); } } @override void dispose() { controller?.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return myScaffold(child: buildBody()); } Widget buildBody() { return Column( children: [ myAppBar( title: '扫一扫', actions: [buildFlash()], ), Expanded( child: QRView( key: qrKey, onQRViewCreated: _onQRViewCreated, ), ), ], ); } Widget buildFlash() { return GestureDetector( onTap: () => controller?.toggleFlash(), behavior: HitTestBehavior.opaque, child: Container( padding: const EdgeInsets.symmetric(horizontal: 16), alignment: Alignment.center, child: const Text('闪光灯', style: TextStyle(fontSize: 14, color: Colors.white)), ), ); } }