Browse Source

测量单位配置上云

gavin.chen 1 year ago
parent
commit
4a68cddf01

+ 0 - 60
lib/interfaces/enums/uint.dart

@@ -1,60 +0,0 @@
-enum Unit {
-  none,
-  percent,
-  fraction,
-  //
-  placeholder3,
-  placeholder4,
-  placeholder5,
-  placeholder6,
-  placeholder7,
-  placeholder8,
-  placeholder9,
-  // Length
-  cm,
-  mm,
-  inch,
-  ft,
-  // Time
-  s,
-  minute,
-  hour,
-  day,
-  week,
-  weekDay,
-  tick,
-  msec,
-  //
-  placeholder28,
-  placeholder29,
-  // Angle
-  degree,
-  radian,
-  //
-  placeholder32,
-  placeholder33,
-  placeholder34,
-  placeholder35,
-  placeholder36,
-  placeholder37,
-  placeholder38,
-  placeholder39,
-  // Weight
-  g,
-  mg,
-  ng,
-  kg,
-  oz,
-  lb,
-  lbOz,
-  //
-  placeholder47,
-  placeholder48,
-  placeholder49,
-  //Area
-  cm2,
-  mm2,
-  m3,
-  //
-  placeholder53,
-}

+ 1 - 1
lib/interfaces/process/calculators/values.dart

@@ -22,7 +22,7 @@ abstract class ValueBase {
   }
 
   /// 目标单位
-  VidUsUnit get targetUnit => meta.unit;
+  VidUsUnit get metaUnit => meta.unit;
 
   double? pickFloat() {
     if (this is FloatValue) {

+ 0 - 1
lib/interfaces/process/viewports/logical_coordinate.dart

@@ -1,5 +1,4 @@
 import 'package:fis_measure/interfaces/date_types/rect_region.dart';
-import 'package:fis_measure/interfaces/enums/uint.dart';
 import 'package:vid/us/vid_us_unit.dart';
 
 import 'image_boundary.dart';

+ 2 - 4
lib/process/calcuators/curve.dart

@@ -58,11 +58,9 @@ class AreaPerimeterCal extends Calculator<AreaItemAbstract, double> {
 
     for (var output in ref.meta.outputs) {
       if (output.name == MeasureTerms.Perimeter) {
-        var value = roundDouble(perimeter, output.fractionalDigits);
-        feature.updateFloatValue(output, value, output.unit);
+        feature.updateFloatValue(output, perimeter, output.unit);
       } else if (output.name == MeasureTerms.Area) {
-        var value = roundDouble(area, output.fractionalDigits);
-        feature.updateFloatValue(output, value, output.unit);
+        feature.updateFloatValue(output, area, output.unit);
       }
     }
     // double value = clacArea(points);

+ 0 - 1
lib/process/viewports/viewport.dart

@@ -1,6 +1,5 @@
 import 'package:fis_measure/interfaces/process/viewports/image_boundary.dart';
 import 'package:fis_measure/interfaces/process/physical_coordinates/physical_coordinate.dart';
-import 'package:fis_measure/interfaces/enums/uint.dart';
 import 'package:fis_measure/interfaces/date_types/rect_region.dart';
 import 'package:fis_measure/interfaces/date_types/point.dart';
 import 'package:fis_measure/interfaces/process/viewports/logical_coordinate.dart';

+ 1 - 7
lib/process/workspace/measure_data_controller.dart

@@ -153,7 +153,7 @@ class MeasureDataController implements IMeasureDataController {
   List<ItemMetaGroup> _itemMetaListGroup = [];
 
   /// 新增的
-  List<ItemMetaDTO> _itemMetaListConfig = [];
+  List<ItemMetaDTO> itemMetaListConfig = [];
   Paint _paintLinePan = Paint()
     ..color = MeasureColors.Primary
     ..isAntiAlias = true
@@ -217,12 +217,6 @@ class MeasureDataController implements IMeasureDataController {
     }
   }
 
-  List<ItemMetaDTO> get itemMetaListConfig => _itemMetaListConfig;
-  @override
-  set itemMetaListConfig(List<ItemMetaDTO> value) {
-    _itemMetaListConfig = value;
-  }
-
   @override
   List<String> get annotationList => _annotationList;
   @override

+ 85 - 96
lib/view/measure/measure_config/measure_configuation_page.dart

@@ -2,6 +2,7 @@ import 'dart:convert';
 
 import 'package:fis_i18n/i18n.dart';
 import 'package:fis_jsonrpc/rpc.dart';
+import 'package:fis_measure/define.dart';
 import 'package:fis_measure/interfaces/process/items/terms.dart';
 import 'package:fis_measure/interfaces/process/player/play_controller.dart';
 import 'package:fis_measure/interfaces/process/workspace/application.dart';
@@ -10,6 +11,7 @@ import 'package:fis_measure/process/workspace/measure_data_controller.dart';
 import 'package:fis_measure/process/workspace/measure_handler.dart';
 import 'package:fis_measure/view/measure/measure_config/widgets/has_selected_setting_dialog.dart';
 import 'package:fis_measure/view/measure/measure_config/widgets/measure_configuration_style.dart';
+import 'package:fis_measure/view/measure/measure_config/widgets/measure_configuration_unit.dart';
 import 'package:fis_measure/view/measure/measure_config/widgets/measurement_tool_selection.dart';
 import 'package:fis_measure/view/measure/measure_view_controller.dart';
 import 'package:fis_measure/view/player/controller.dart';
@@ -108,7 +110,7 @@ class MeasureConfigurationPageState extends State<MeasureConfigurationPage> {
     }
   }
 
-  void submit() async {
+  void onSubmit() async {
     /// 判断两个数组是否相同
     if (savedMeasureList.toString() != chooseMeasureList.toString() ||
         measureData.itemMetaListConfig.isNotEmpty) {
@@ -141,6 +143,11 @@ class MeasureConfigurationPageState extends State<MeasureConfigurationPage> {
     saveMeasureSystemSettingAsync();
   }
 
+  void onCancel() async {
+    // TODO 关闭时校验【measureSystemSetting】是否发生变更
+    print('TODO 关闭时校验【measureSystemSetting】是否发生变更,如果发生变化需要询问用户是否保存');
+  }
+
   // 保存修改测量样式
   Future<void> saveMeasureSystemSettingAsync() async {
     measureData.measureSystemSettingChanged
@@ -177,6 +184,8 @@ class MeasureConfigurationPageState extends State<MeasureConfigurationPage> {
 
     savedMeasureList = chooseMeasure.toSet().toList();
     chooseMeasureList = chooseMeasure.toSet().toList();
+
+    /// TODO 打开时缓存当前的用户测量配置 【measureSystemSetting】,关闭时校验是否发生变更
   }
 
   @override
@@ -186,33 +195,46 @@ class MeasureConfigurationPageState extends State<MeasureConfigurationPage> {
 
   @override
   FWidget build(BuildContext context) {
-    return FSimpleDialog(
-      title: FText(
-        i18nBook.user.setting.t,
-        style: const TextStyle(
-          color: Colors.white,
-          fontSize: 18,
-        ),
-      ),
-      cancelString: i18nBook.common.cancel.t,
-      okString: i18nBook.common.confirm.t,
-      isDefault: true,
-      onOk: () {
-        submit();
-        Get.back();
-      },
-      onCancel: () {
-        chooseMeasureList = measureData.getMeasureApplicationList;
-        measureData.availableModes = measureMode;
-        measureMetaController.setMeasureConfigItemMetaList();
-        Get.back();
-        setState(() {});
-      },
+    return FStack(
       children: [
-        FContainer(
-          width: 830,
-          height: 500,
-          child: _buildMeasureconfiguration(),
+        QuickFWidget(
+          ModalBarrier(
+            color: Colors.black.withOpacity(0.5),
+            onDismiss: () {
+              onCancel();
+            },
+          ),
+        ),
+        FSimpleDialog(
+          title: FText(
+            i18nBook.user.setting.t,
+            style: const TextStyle(
+              color: Colors.white,
+              fontSize: 18,
+            ),
+          ),
+          cancelString: i18nBook.common.cancel.t,
+          okString: i18nBook.common.confirm.t,
+          isDefault: true,
+          onOk: () {
+            onSubmit();
+            Get.back();
+          },
+          onCancel: () {
+            chooseMeasureList = measureData.getMeasureApplicationList;
+            measureData.availableModes = measureMode;
+            measureMetaController.setMeasureConfigItemMetaList();
+            onCancel();
+            Get.back();
+            setState(() {});
+          },
+          children: [
+            FContainer(
+              width: 830,
+              height: 500,
+              child: _buildMeasureconfiguration(),
+            ),
+          ],
         ),
       ],
     );
@@ -241,76 +263,11 @@ class MeasureConfigurationPageState extends State<MeasureConfigurationPage> {
                   height: 10,
                 ),
                 if (!widget.ifHideConfig)
-                  FContainer(
-                    width: 160,
-                    child: FInkWell(
-                      onTap: () {
-                        changeTab(0);
-                      },
-                      child: FContainer(
-                        padding: const EdgeInsets.symmetric(
-                          vertical: 10,
-                          horizontal: 5,
-                        ),
-                        child: FText(
-                          i18nBook.measure.measureToolSelect.t,
-                          style: measureToolsTab == 0
-                              ? TextStyle(
-                                  color: FTheme.ins.colorScheme.primary,
-                                )
-                              : const TextStyle(),
-                          textAlign: TextAlign.end,
-                        ),
-                      ),
-                    ),
-                  ),
+                  _buildTabButton(0, i18nBook.measure.measureToolSelect.t),
                 if (!widget.ifHideConfig)
-                  FContainer(
-                    width: 160,
-                    child: FInkWell(
-                      onTap: () {
-                        changeTab(1);
-                      },
-                      child: FContainer(
-                        padding: const EdgeInsets.symmetric(
-                          vertical: 10,
-                          horizontal: 5,
-                        ),
-                        child: FText(
-                          i18nBook.measure.selectedMeasureTool.t,
-                          style: measureToolsTab == 1
-                              ? TextStyle(
-                                  color: FTheme.ins.colorScheme.primary,
-                                )
-                              : const TextStyle(),
-                          textAlign: TextAlign.end,
-                        ),
-                      ),
-                    ),
-                  ),
-                FContainer(
-                  width: 160,
-                  child: FInkWell(
-                    onTap: () {
-                      changeTab(2);
-                    },
-                    child: FContainer(
-                      padding: const EdgeInsets.symmetric(
-                        vertical: 10,
-                        horizontal: 5,
-                      ),
-                      child: FText(
-                        i18nBook.measure.measureStyleConfig.t,
-                        style: measureToolsTab == 2
-                            ? TextStyle(
-                                color: FTheme.ins.colorScheme.primary,
-                              )
-                            : const TextStyle(),
-                        textAlign: TextAlign.end,
-                      ),
-                    ),
-                  ),
-                ),
+                  _buildTabButton(1, i18nBook.measure.selectedMeasureTool.t),
+                _buildTabButton(2, i18nBook.measure.measureStyleConfig.t),
+                _buildTabButton(3, i18nBook.measure.measureUnitConfig.t),
               ],
             ),
           ),
@@ -339,12 +296,44 @@ class MeasureConfigurationPageState extends State<MeasureConfigurationPage> {
                   businessParent: widget,
                 ),
               ),
+              FOffstage(
+                offstage: measureToolsTab != 3,
+                child: UnitConfigPage(
+                  businessParent: widget,
+                ),
+              ),
             ],
           )),
         ],
       ),
     );
   }
+
+  FWidget _buildTabButton(int index, String title) {
+    return FContainer(
+      width: 160,
+      child: FInkWell(
+        onTap: () {
+          changeTab(index);
+        },
+        child: FContainer(
+          padding: const EdgeInsets.symmetric(
+            vertical: 10,
+            horizontal: 5,
+          ),
+          child: FText(
+            title,
+            style: measureToolsTab == index
+                ? TextStyle(
+                    color: FTheme.ins.colorScheme.primary,
+                  )
+                : const TextStyle(),
+            textAlign: TextAlign.end,
+          ),
+        ),
+      ),
+    );
+  }
 }
 
 class _HasSelectedModulePage extends StatelessWidget implements FWidget {

+ 14 - 11
lib/view/measure/measure_config/widgets/measure_configuration_style_components.dart

@@ -1,4 +1,5 @@
 import 'package:fis_i18n/i18n.dart';
+import 'package:fis_jsonrpc/services/remedical.m.dart';
 import 'package:fis_measure/values/unit_desc.dart';
 import 'package:fis_measure/view/cursor.dart';
 import 'package:fis_measure/view/measure/measure_config/widgets/measure_configuration_style.dart';
@@ -111,7 +112,7 @@ class PatternItemRadio extends FStatelessWidget {
         children: List<FWidget>.generate(
           tabList.length,
           (index) {
-            final FWidget child;
+            FWidget child = const FText("");
             switch (type) {
               case PatternValueType.size:
                 child = FText(
@@ -126,16 +127,18 @@ class PatternItemRadio extends FStatelessWidget {
                 );
                 break;
               case PatternValueType.unit:
-                child = FText(
-                  UnitDescriptionMap.getDesc(tabList[index]),
-                  style: tabList[index] != value
-                      ? const TextStyle(
-                          color: Colors.black,
-                        )
-                      : const TextStyle(
-                          color: Colors.white,
-                        ),
-                );
+                if (tabList is List<Unit>) {
+                  child = FText(
+                    UnitDescriptionMap.getDescByInt(tabList[index].index),
+                    style: tabList[index] != value
+                        ? const TextStyle(
+                            color: Colors.black,
+                          )
+                        : const TextStyle(
+                            color: Colors.white,
+                          ),
+                  );
+                }
                 break;
               case PatternValueType.cursor:
                 child = MeasureCursor(

+ 172 - 0
lib/view/measure/measure_config/widgets/measure_configuration_unit.dart

@@ -0,0 +1,172 @@
+// ignore_for_file: non_constant_identifier_names
+
+import 'package:fis_i18n/i18n.dart';
+import 'package:fis_jsonrpc/services/remedical.m.dart';
+import 'package:fis_measure/process/workspace/measure_data_controller.dart';
+import 'package:fis_measure/view/measure/measure_config/widgets/measure_configuration_style_components.dart';
+import 'package:fis_ui/index.dart';
+import 'package:fis_ui/interface/interactive_container.dart';
+import 'package:flutter/material.dart';
+import 'package:get/get.dart';
+import 'package:vid/us/vid_us_unit.dart';
+
+class UnitConfigPage extends FStatelessWidget {
+  UnitConfigPage({
+    Key? key,
+    required this.businessParent,
+  }) : super(key: key);
+
+  ///父级节点
+  final FInteractiveContainer businessParent;
+
+  /// 测量数据
+  final measureData = Get.find<MeasureDataController>();
+
+  @override
+  FWidget build(BuildContext context) {
+    return FContainer(
+        width: 550,
+        height: 500,
+        padding: const EdgeInsets.symmetric(
+          vertical: 15,
+          horizontal: 15,
+        ),
+        margin: const EdgeInsets.symmetric(
+          horizontal: 15,
+        ),
+        child: ConfigBody(
+          businessParent: businessParent,
+          measureData: measureData,
+        ));
+  }
+}
+
+class ConfigBody extends FStatefulWidget {
+  const ConfigBody({
+    Key? key,
+    required this.businessParent,
+    required this.measureData,
+  }) : super(key: key);
+
+  ///父级节点
+  final FInteractiveContainer businessParent;
+  final MeasureDataController measureData;
+  @override
+  FState<ConfigBody> createState() => _ConfigBodyState();
+}
+
+class _ConfigBodyState extends FState<ConfigBody> {
+  @override
+  void initState() {
+    super.initState();
+  }
+
+  /// [长度单位] 可选项
+  static final List<Unit> C_DISTANCE_UNIT_LIST = [
+    Unit.cm,
+    Unit.mm,
+    Unit.inch,
+    Unit.ft,
+  ];
+
+  /// [面积单位] 可选项
+  static final List<Unit> C_AREA_UNIT_LIST = [
+    Unit.cm2,
+    Unit.mm2,
+    Unit.m2,
+  ];
+
+  /// [速度单位] 可选项
+  static final List<Unit> C_VELOCITY_UNIT_LIST = [
+    Unit.mms,
+    Unit.cms,
+    Unit.ms,
+  ];
+
+  /// [时间单位] 可选项
+  static final List<Unit> C_TIME_UNIT_LIST = [
+    Unit.msec,
+    Unit.s,
+  ];
+
+  @override
+  FWidget build(BuildContext context) {
+    return FListView(
+      shrinkWrap: true,
+      children: [
+        PatternBodyItem(
+          patternBodyItemTitle: i18nBook.measure.measureUnit.t,
+          patternBodyItem: FColumn(
+            children: [
+              /// [长度单位]
+              PatternItem(
+                title: i18nBook.measure.distanceUnit.t,
+                item: PatternItemRadio(
+                  tabList: C_DISTANCE_UNIT_LIST,
+                  businessParent: widget.businessParent,
+                  value: widget.measureData.measureSystemSetting.distanceUnit,
+                  type: PatternValueType.unit,
+                  onChangeState: (value) {
+                    setState(() {
+                      widget.measureData.measureSystemSetting.distanceUnit =
+                          value;
+                    });
+                  },
+                ),
+              ),
+
+              /// [面积单位]
+              PatternItem(
+                title: i18nBook.measure.areaUnit.t,
+                item: PatternItemRadio(
+                  tabList: C_AREA_UNIT_LIST,
+                  businessParent: widget.businessParent,
+                  value: widget.measureData.measureSystemSetting.areaUnit,
+                  type: PatternValueType.unit,
+                  onChangeState: (value) {
+                    setState(() {
+                      widget.measureData.measureSystemSetting.areaUnit = value;
+                    });
+                  },
+                ),
+              ),
+
+              /// [速度单位]
+              PatternItem(
+                title: i18nBook.measure.velocityUnit.t,
+                item: PatternItemRadio(
+                  tabList: C_VELOCITY_UNIT_LIST,
+                  businessParent: widget.businessParent,
+                  value: widget.measureData.measureSystemSetting.velocityUnit,
+                  type: PatternValueType.unit,
+                  onChangeState: (value) {
+                    setState(() {
+                      widget.measureData.measureSystemSetting.velocityUnit =
+                          value;
+                    });
+                  },
+                ),
+              ),
+
+              /// [时间单位]
+              PatternItem(
+                title: i18nBook.measure.timeUnit.t,
+                item: PatternItemRadio(
+                  tabList: C_TIME_UNIT_LIST,
+                  businessParent: widget.businessParent,
+                  value: widget.measureData.measureSystemSetting.timeUnit,
+                  type: PatternValueType.unit,
+                  onChangeState: (value) {
+                    setState(() {
+                      widget.measureData.measureSystemSetting.timeUnit = value;
+                    });
+                  },
+                ),
+              ),
+            ],
+          ),
+        ),
+      ],
+    );
+  }
+}

+ 62 - 2
lib/view/result/converter.dart

@@ -1,10 +1,15 @@
+import 'dart:developer';
+
 import 'package:fis_measure/interfaces/process/calculators/values.dart';
 import 'package:fis_measure/interfaces/process/items/item.dart';
 import 'package:fis_measure/interfaces/process/items/item_feature.dart';
 import 'package:fis_measure/interfaces/process/items/item_metas.dart';
 import 'package:fis_measure/process/unit/convert/convert.dart';
+import 'package:fis_measure/process/workspace/measure_data_controller.dart';
 import 'package:fis_measure/values/unit_desc.dart';
 import 'package:fis_measure/view/result/results_panel.dart';
+import 'package:get/get.dart';
+import 'package:vid/us/vid_us_unit.dart';
 
 class FeatureValueDescConverter {
   final IMeasureItemFeature feature;
@@ -86,10 +91,10 @@ class FeatureValueDescConverter {
       }
 
       final unit = value.unit;
-      final targetUnit = value.targetUnit;
+      final targetUnit = getUnitFromConfig(value.metaUnit);
       final targetVal = UnitValueConverter.convert(unit, targetUnit, floatVal);
       final targetValRound =
-          _roundDouble(targetVal, value.meta.fractionalDigits);
+          _roundDoubleToString(targetVal, value.meta.fractionalDigits);
       final unitStr = UnitDescriptionMap.getDesc(targetUnit);
       return '$targetValRound $unitStr';
     } else if (value is StringValue) {
@@ -123,4 +128,59 @@ class FeatureValueDescConverter {
     final result = double.parse(digitsStr);
     return result;
   }
+
+  String _roundDoubleToString(double value, [int digits = 2]) {
+    final digitsStr = value.toStringAsFixed(digits);
+    return digitsStr;
+  }
+
+  VidUsUnit getUnitFromConfig(VidUsUnit unit) {
+    try {
+      final measureData = Get.find<MeasureDataController>();
+      if (distanceUnits.contains(unit)) {
+        return VidUsUnitMap.getUnit(
+            measureData.measureSystemSetting.distanceUnit.index);
+      }
+      if (areaUnits.contains(unit)) {
+        return VidUsUnitMap.getUnit(
+            measureData.measureSystemSetting.areaUnit.index);
+      }
+      if (velocityUnits.contains(unit)) {
+        return VidUsUnitMap.getUnit(
+            measureData.measureSystemSetting.velocityUnit.index);
+      }
+      if (timeUnits.contains(unit)) {
+        return VidUsUnitMap.getUnit(
+            measureData.measureSystemSetting.timeUnit.index);
+      }
+      return unit;
+    } catch (e) {
+      log('getUnitFromConfig error: $e');
+      return unit;
+    }
+  }
+
+  static final List<VidUsUnit> distanceUnits = [
+    VidUsUnit.mm,
+    VidUsUnit.cm,
+    VidUsUnit.inch,
+    VidUsUnit.ft,
+  ];
+
+  static final List<VidUsUnit> areaUnits = [
+    VidUsUnit.mm2,
+    VidUsUnit.cm2,
+    VidUsUnit.m2,
+  ];
+
+  static final List<VidUsUnit> velocityUnits = [
+    VidUsUnit.mms,
+    VidUsUnit.cms,
+    VidUsUnit.ms,
+  ];
+
+  static final List<VidUsUnit> timeUnits = [
+    VidUsUnit.msec,
+    VidUsUnit.s,
+  ];
 }

+ 1 - 0
lib/view/result/results_panel.dart

@@ -105,6 +105,7 @@ class _MeasureResultPanelState extends State<MeasureResultPanel> {
 
   /// 样式更新事件监听
   void _onMeasureSystemSettingChanged(_, e) {
+    _updateOutputs();
     setState(() {});
   }
 

+ 50 - 66
pubspec.lock

@@ -5,10 +5,10 @@ packages:
     dependency: transitive
     description:
       name: archive
-      sha256: "0c8368c9b3f0abbc193b9d6133649a614204b528982bebc7026372d61677ce3a"
+      sha256: "20071638cbe4e5964a427cfa0e86dce55d060bc7d82d56f3554095d7239a8765"
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "3.3.7"
+    version: "3.4.2"
   args:
     dependency: transitive
     description:
@@ -21,18 +21,18 @@ packages:
     dependency: transitive
     description:
       name: asn1lib
-      sha256: ab96a1cb3beeccf8145c52e449233fe68364c9641623acd3adad66f8184f1039
+      sha256: b74e3842a52c61f8819a1ec8444b4de5419b41a7465e69d4aa681445377398b0
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "1.4.0"
+    version: "1.4.1"
   async:
     dependency: transitive
     description:
       name: async
-      sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0
+      sha256: "271b8899fc99f9df4f4ed419fa14e2fff392c7b2c162fbb87b222e2e963ddc73"
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "2.10.0"
+    version: "2.9.0"
   audio_video_progress_bar:
     dependency: "direct main"
     description:
@@ -45,10 +45,10 @@ packages:
     dependency: transitive
     description:
       name: boolean_selector
-      sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
+      sha256: "5bbf32bc9e518d41ec49718e2931cd4527292c9b0c6d2dffcf7fe6b9a8a8cf72"
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "2.1.1"
+    version: "2.1.0"
   characters:
     dependency: transitive
     description:
@@ -77,10 +77,10 @@ packages:
     dependency: transitive
     description:
       name: collection
-      sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0
+      sha256: ef7e3a5529178ce8f37a9d0b11cbbc8b1e025940f9cf9f76c42da6796301219d
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "1.17.0"
+    version: "1.16.0"
   convert:
     dependency: transitive
     description:
@@ -153,14 +153,6 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "2.0.2"
-  file:
-    dependency: transitive
-    description:
-      name: file
-      sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d"
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "6.1.4"
   fis_common:
     dependency: "direct main"
     description:
@@ -174,8 +166,8 @@ packages:
     dependency: "direct main"
     description:
       path: "."
-      ref: dfeb9de
-      resolved-ref: dfeb9debc8b38dfdf6a2b14f78d15a3ea4714ae3
+      ref: "94500e9"
+      resolved-ref: "94500e9a2c77243a1f0366fa8732b8d4c3fdd72f"
       url: "http://git.ius.plus:88/Project-Wing/fis_lib_i18n.git"
     source: git
     version: "0.0.1"
@@ -183,8 +175,8 @@ packages:
     dependency: "direct main"
     description:
       path: "."
-      ref: "558d6f1539"
-      resolved-ref: "558d6f153933c8a633096b69e20285217f4399e4"
+      ref: c3c961d
+      resolved-ref: c3c961d45d6d205a37195cb18b9206a78e3347da
       url: "http://git.ius.plus:88/Project-Wing/fis_lib_jsonrpc.git"
     source: git
     version: "0.0.1"
@@ -405,10 +397,10 @@ packages:
     dependency: transitive
     description:
       name: js
-      sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7"
+      sha256: a5e201311cb08bf3912ebbe9a2be096e182d703f881136ec1e81a2338a9e120d
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "0.6.5"
+    version: "0.6.4"
   lints:
     dependency: transitive
     description:
@@ -421,10 +413,10 @@ packages:
     dependency: transitive
     description:
       name: matcher
-      sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72"
+      sha256: "80c2989398773fa06e2457e9ff08580f24e9858b28462a722241cb53e5613478"
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "0.12.13"
+    version: "0.12.12"
   material_color_utilities:
     dependency: transitive
     description:
@@ -469,50 +461,50 @@ packages:
     dependency: "direct main"
     description:
       name: path_provider
-      sha256: "3087813781ab814e4157b172f1a11c46be20179fcc9bea043e0fba36bc0acaa2"
+      sha256: "909b84830485dbcd0308edf6f7368bc8fd76afa26a270420f34cabea2a6467a0"
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "2.0.15"
+    version: "2.1.0"
   path_provider_android:
     dependency: transitive
     description:
       name: path_provider_android
-      sha256: "2cec049d282c7f13c594b4a73976b0b4f2d7a1838a6dd5aaf7bd9719196bee86"
+      sha256: "5d44fc3314d969b84816b569070d7ace0f1dea04bd94a83f74c4829615d22ad8"
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "2.0.27"
+    version: "2.1.0"
   path_provider_foundation:
     dependency: transitive
     description:
       name: path_provider_foundation
-      sha256: "1995d88ec2948dac43edf8fe58eb434d35d22a2940ecee1a9fefcd62beee6eb3"
+      sha256: "1b744d3d774e5a879bb76d6cd1ecee2ba2c6960c03b1020cd35212f6aa267ac5"
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "2.2.3"
+    version: "2.3.0"
   path_provider_linux:
     dependency: transitive
     description:
       name: path_provider_linux
-      sha256: "2ae08f2216225427e64ad224a24354221c2c7907e448e6e0e8b57b1eb9f10ad1"
+      sha256: ba2b77f0c52a33db09fc8caf85b12df691bf28d983e84cf87ff6d693cfa007b3
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "2.1.10"
+    version: "2.2.0"
   path_provider_platform_interface:
     dependency: transitive
     description:
       name: path_provider_platform_interface
-      sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec"
+      sha256: bced5679c7df11190e1ddc35f3222c858f328fff85c3942e46e7f5589bf9eb84
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "2.0.6"
+    version: "2.1.0"
   path_provider_windows:
     dependency: transitive
     description:
       name: path_provider_windows
-      sha256: d3f80b32e83ec208ac95253e0cd4d298e104fbc63cb29c5c69edaed43b0c69d6
+      sha256: ee0e0d164516b90ae1f970bdf29f726f1aa730d7cfc449ecc74c495378b705da
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "2.1.6"
+    version: "2.2.0"
   petitparser:
     dependency: transitive
     description:
@@ -525,18 +517,18 @@ packages:
     dependency: transitive
     description:
       name: platform
-      sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76"
+      sha256: "57c07bf82207aee366dfaa3867b3164e4f03a238a461a11b0e8a3a510d51203d"
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "3.1.0"
+    version: "3.1.1"
   plugin_platform_interface:
     dependency: transitive
     description:
       name: plugin_platform_interface
-      sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc"
+      sha256: "43798d895c929056255600343db8f049921cbec94d31ec87f1dc5c16c01935dd"
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "2.1.4"
+    version: "2.1.5"
   pointer_interceptor:
     dependency: transitive
     description:
@@ -553,14 +545,6 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "3.7.3"
-  process:
-    dependency: transitive
-    description:
-      name: process
-      sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09"
-      url: "https://pub.flutter-io.cn"
-    source: hosted
-    version: "4.2.4"
   qr:
     dependency: transitive
     description:
@@ -602,10 +586,10 @@ packages:
     dependency: transitive
     description:
       name: stack_trace
-      sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5
+      sha256: f8d9f247e2f9f90e32d1495ff32dac7e4ae34ffa7194c5ff8fcc0fd0e52df774
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "1.11.0"
+    version: "1.10.0"
   stream_channel:
     dependency: transitive
     description:
@@ -642,10 +626,10 @@ packages:
     dependency: transitive
     description:
       name: test_api
-      sha256: c9aba3b3dbfe8878845dfab5fa096eb8de7b62231baeeb1cea8e3ee81ca8c6d8
+      sha256: ceeddf59d613e862e77f4b506cfc2945ac9637ce0b4c00f4f4c1ac639f3e9731
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "0.4.15"
+    version: "0.4.14"
   typed_data:
     dependency: transitive
     description:
@@ -682,10 +666,10 @@ packages:
     dependency: transitive
     description:
       name: url_launcher_android
-      sha256: "1a5848f598acc5b7d8f7c18b8cb834ab667e59a13edc3c93e9d09cf38cc6bc87"
+      sha256: "3dd2388cc0c42912eee04434531a26a82512b9cb1827e0214430c9bcbddfe025"
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "6.0.34"
+    version: "6.0.38"
   url_launcher_ios:
     dependency: transitive
     description:
@@ -706,34 +690,34 @@ packages:
     dependency: transitive
     description:
       name: url_launcher_macos
-      sha256: "91ee3e75ea9dadf38036200c5d3743518f4a5eb77a8d13fda1ee5764373f185e"
+      sha256: "1c4fdc0bfea61a70792ce97157e5cc17260f61abbe4f39354513f39ec6fd73b1"
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "3.0.5"
+    version: "3.0.6"
   url_launcher_platform_interface:
     dependency: transitive
     description:
       name: url_launcher_platform_interface
-      sha256: "6c9ca697a5ae218ce56cece69d46128169a58aa8653c1b01d26fcd4aad8c4370"
+      sha256: bfdfa402f1f3298637d71ca8ecfe840b4696698213d5346e9d12d4ab647ee2ea
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "2.1.2"
+    version: "2.1.3"
   url_launcher_web:
     dependency: transitive
     description:
       name: url_launcher_web
-      sha256: "81fe91b6c4f84f222d186a9d23c73157dc4c8e1c71489c4d08be1ad3b228f1aa"
+      sha256: cc26720eefe98c1b71d85f9dc7ef0cada5132617046369d9dc296b3ecaa5cbb4
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "2.0.16"
+    version: "2.0.18"
   url_launcher_windows:
     dependency: transitive
     description:
       name: url_launcher_windows
-      sha256: "254708f17f7c20a9c8c471f67d86d76d4a3f9c1591aad1e15292008aceb82771"
+      sha256: "7967065dd2b5fccc18c653b97958fdf839c5478c28e767c61ee879f4e7882422"
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "3.0.6"
+    version: "3.0.7"
   uuid:
     dependency: transitive
     description:
@@ -819,10 +803,10 @@ packages:
     dependency: transitive
     description:
       name: xdg_directories
-      sha256: ee1505df1426458f7f60aac270645098d318a8b4766d85fde75f76f2e21807d1
+      sha256: f0c26453a2d47aa4c2570c6a033246a3fc62da2fe23c7ffdd0a7495086dc0247
       url: "https://pub.flutter-io.cn"
     source: hosted
-    version: "1.0.0"
+    version: "1.0.2"
   xml:
     dependency: transitive
     description:

+ 3 - 3
pubspec.yaml

@@ -66,7 +66,7 @@ dependencies:
   fis_i18n:
     git:
       url: http://git.ius.plus:88/Project-Wing/fis_lib_i18n.git
-      ref: dfeb9de
+      ref: "94500e9"
   fis_lib_qrcode:
     git:
       url: http://git.ius.plus/Project-Wing/fis_lib_qrcode.git
@@ -96,11 +96,11 @@ dependency_overrides:
   fis_i18n:
     git:
       url: http://git.ius.plus:88/Project-Wing/fis_lib_i18n.git
-      ref: 20fcc4f
+      ref: "94500e9"
   fis_jsonrpc:
     git:
       url: http://git.ius.plus:88/Project-Wing/fis_lib_jsonrpc.git
-      ref: 558d6f1539
+      ref: c3c961d
   fis_lib_business_components:
     git:
       url: http://git.ius.plus/Project-Wing/fis_lib_business_components.git