Browse Source

体检系统添加扫一扫功能

finlay 1 year ago
parent
commit
0f61b0ef50
4 changed files with 129 additions and 5 deletions
  1. 13 0
      lib/pages/home/controller.dart
  2. 19 1
      lib/pages/home/view.dart
  3. 92 0
      lib/pages/widgets/qr_view_example.dart
  4. 5 4
      pubspec.yaml

+ 13 - 0
lib/pages/home/controller.dart

@@ -1,5 +1,6 @@
 import 'dart:async';
 
+import 'package:fis_jsonrpc/services/vitalPatient.m.dart';
 import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
@@ -10,6 +11,7 @@ import 'package:vitalapp/architecture/utils/prompt_box.dart';
 import 'package:vitalapp/global.dart';
 import 'package:vitalapp/helper/goto_helper.dart';
 import 'package:vitalapp/managers/interfaces/account.dart';
+import 'package:vitalapp/managers/interfaces/patient.dart';
 import 'package:vitalapp/pages/controllers/home_nav_mixin.dart';
 import 'package:vitalapp/pages/home/models/menu.dart';
 import 'package:vitalapp/store/store.dart';
@@ -36,6 +38,8 @@ class HomeController extends FControllerBase with HomeNavMixin {
     );
   }
 
+  final _patientManager = Get.find<IPatientManager>();
+
   final state = HomeState();
 
   /// 当前选中路由
@@ -317,6 +321,15 @@ class HomeController extends FControllerBase with HomeNavMixin {
       ];
     }
   }
+
+  void onScanData(String code) async {
+    print('$code');
+    PatientDTO? patientInfoDto = await _patientManager.getDetail(code);
+    if (patientInfoDto != null) {
+      Store.user.currentSelectPatientInfo = patientInfoDto;
+    }
+    Get.back();
+  }
 }
 
 class _PatientAddIconProxyWidget extends StatelessWidget {

+ 19 - 1
lib/pages/home/view.dart

@@ -10,6 +10,7 @@ import 'package:vitalapp/components/dynamic_drawer.dart';
 import 'package:vitalapp/pages/home/controller.dart';
 import 'package:vitalapp/pages/home/widgets/avatar.dart';
 import 'package:fis_common/helpers/color.dart';
+import 'package:vitalapp/pages/widgets/qr_view_example.dart';
 import 'package:vitalapp/store/store.dart';
 import 'widgets/menus.dart';
 import 'widgets/navigator.dart';
@@ -296,7 +297,24 @@ class HomePage extends GetView<HomeController> {
   Widget _buildHeaderRight(BuildContext context) {
     return Row(
       mainAxisSize: MainAxisSize.min,
-      children: const [
+      children: [
+        TextButton(
+          child:
+              Text('扫一扫', style: TextStyle(fontSize: 24, color: Colors.white)),
+          onPressed: () {
+            Get.to(() => QRViewExample(
+                  onPressed: controller.onScanData,
+                ));
+          },
+        ),
+        // Padding(
+        //   padding: EdgeInsets.symmetric(horizontal: 8),
+        //   child: VerticalDivider(
+        //     indent: 12,
+        //     endIndent: 12,
+        //     color: Colors.white,
+        //   ),
+        // ),
         HeaderPatientPlace(),
         Padding(
           padding: EdgeInsets.symmetric(horizontal: 8),

+ 92 - 0
lib/pages/widgets/qr_view_example.dart

@@ -0,0 +1,92 @@
+import 'package:fis_common/logger/logger.dart';
+import 'package:flutter/material.dart';
+import 'package:qr_code_scanner/qr_code_scanner.dart';
+
+class QRViewExample extends StatefulWidget {
+  final Function(String) onPressed;
+
+  const QRViewExample({Key? key, required this.onPressed}) : super(key: key);
+
+  @override
+  State<StatefulWidget> createState() => _QRViewExampleState();
+}
+
+class _QRViewExampleState extends State<QRViewExample> {
+  Barcode? result;
+  QRViewController? controller;
+  final GlobalKey qrKey = GlobalKey(debugLabel: 'QR');
+
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      appBar: AppBar(
+        title: Text('扫一扫'),
+      ),
+      body: Column(
+        children: <Widget>[
+          Expanded(
+            flex: 4,
+            child: _buildQrView(
+              context,
+            ),
+          ),
+        ],
+      ),
+    );
+  }
+
+  @override
+  void dispose() {
+    controller?.dispose();
+    super.dispose();
+  }
+
+  @override
+  void reassemble() {
+    super.reassemble();
+    controller?.pauseCamera();
+    controller?.resumeCamera();
+  }
+
+  Widget _buildQrView(BuildContext context) {
+    var scanArea = (MediaQuery.of(context).size.width < 400 ||
+            MediaQuery.of(context).size.height < 400)
+        ? 150.0
+        : 300.0;
+    return QRView(
+      key: qrKey,
+      onQRViewCreated: _onQRViewCreated,
+      overlay: QrScannerOverlayShape(
+        borderColor: Theme.of(context).colorScheme.primary,
+        borderRadius: 10,
+        borderLength: 30,
+        borderWidth: 10,
+        cutOutSize: scanArea,
+      ),
+      onPermissionSet: (ctrl, p) => _onPermissionSet(context, ctrl, p),
+    );
+  }
+
+  void _onPermissionSet(BuildContext context, QRViewController ctrl, bool p) {
+    logger.i("QRViewExample _onPermissionSet $p");
+    if (!p) {
+      ScaffoldMessenger.of(context).showSnackBar(
+        const SnackBar(
+          content: Text(
+            'no Permission',
+          ),
+        ),
+      );
+    }
+  }
+
+  void _onQRViewCreated(QRViewController controller) {
+    setState(() {
+      this.controller = controller;
+    });
+    controller.scannedDataStream.listen((event) async {
+      controller.dispose();
+      widget.onPressed.call(event.code!);
+    });
+  }
+}

+ 5 - 4
pubspec.yaml

@@ -3,7 +3,7 @@ description: Flyinsono flutter client.
 
 # The following line prevents the package from being accidentally published to
 # pub.dev using `pub publish`. This is preferred for private packages.
-publish_to: 'none' # Remove this line if you wish to publish to pub.dev
+publish_to: "none" # Remove this line if you wish to publish to pub.dev
 
 # The following defines the version and build number for your application.
 # A version number is three numbers separated by dots, like 1.2.43
@@ -18,7 +18,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
 version: 1.0.0+1
 
 environment:
-  sdk: '>=2.18.2 <3.0.0'
+  sdk: ">=2.18.2 <3.0.0"
 
 dependencies:
   flutter:
@@ -119,6 +119,7 @@ dependencies:
   # geolocator: ^10.0.1
   flutter_blue_plus: ^1.31.4
   geolocator: ^10.0.1
+  qr_code_scanner: ^1.0.1
 
 # 需要覆盖版本号的依赖
 dependency_overrides:
@@ -138,7 +139,7 @@ dependency_overrides:
   fis_ui:
     git:
       url: http://git.ius.plus:88/Project-Wing/fis_lib_ui.git
-      ref: '33f3019'
+      ref: "33f3019"
   fis_jsonrpc:
     git:
       url: http://git.ius.plus:88/Project-Wing/fis_lib_jsonrpc.git
@@ -167,7 +168,7 @@ dependency_overrides:
   fis_measure:
     git:
       url: http://git.ius.plus/Project-Wing/fis_lib_measure.git
-      ref: '9e13864'
+      ref: "9e13864"
     #path: ../fis_lib_measure
   fis_resource:
     git: