123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- import 'package:fis_jsonrpc/rpc.dart';
- import 'package:fis_measure/interfaces/process/items/item_metas.dart';
- import 'package:fis_measure/interfaces/process/visuals/visual_area.dart';
- import 'package:fis_measure/interfaces/process/workspace/application.dart';
- import 'package:fis_measure/process/workspace/measure_data_controller.dart';
- import 'package:fis_measure/process/workspace/measure_handler.dart';
- import 'package:fis_ui/index.dart';
- import 'package:flutter/material.dart';
- import 'package:get/get.dart';
- import 'package:fis_theme/theme.dart';
- import 'package:vid/us/vid_us_mode.dart';
- import 'package:vid/us/vid_us_unit.dart';
- /// 测量方法 Har
- class LeftMeasureTools extends StatefulWidget implements FWidget {
- const LeftMeasureTools();
- @override
- State<LeftMeasureTools> createState() => _LeftMeasureToolsState();
- }
- class _LeftMeasureToolsState extends State<LeftMeasureTools> {
- late final application = Get.find<IApplication>();
- late final measureHandler = Get.find<MeasureHandler>();
- /// 数据
- late final measureData = Get.find<MeasureDataController>();
- void changeItem(ItemMeta itemMeta) {
- application.switchItem(itemMeta);
- if (mounted) {
- setState(() {});
- }
- }
- void applicationModesChanged(sender, List<VidUsMode> e) {
- if (mounted) {
- setState(() {});
- }
- }
- void visualAreaChanged(sender, IVisualArea e) {
- if (mounted) {
- setAvailableModes(e.mode.modeType.toString().split('.')[1]);
- }
- }
- /// 获取组合测量项
- void comboList() {
- List<ItemMeta> itemMetaList = [];
- for (var element in measureData.itemMetaList) {
- if (measureData.getMeasureApplicationList.contains(element.name)) {
- List<ItemOutputMeta> itemOutputMeta = [];
- String? multiMethod;
- List<OutputItemMetaDTO> availableOutputs =
- element.calculator?.availableOutputs ?? [];
- for (var element in availableOutputs) {
- itemOutputMeta.add(
- ItemOutputMeta(
- element.name ?? '',
- element.description ?? '',
- VidUsUnitMap.getUnit(element.unit),
- ),
- );
- }
- List<ItemMeta> childItemMetas = [];
- if (element.multiMethodItems?.isNotEmpty ?? false) {
- ChildItemMetaDTO? itemMeta = element.multiMethodItems!
- .firstWhereOrNull((element) => element.isWorking == true);
- List<ChildItemMetaDTO> childItems = itemMeta?.childItems ?? [];
- /// 组合测量项部分
- for (var element in childItems) {
- childItemMetas.add(
- ItemMeta(
- element.name ?? '',
- measureType: element.measureTypeName!,
- description: element.description ?? '',
- outputs: itemOutputMeta,
- childItems: childItemMetas,
- ),
- );
- }
- }
- itemMetaList.add(
- ItemMeta(
- element.name ?? '',
- measureType: element.measureTypeName!,
- description: element.description ?? '',
- outputs: itemOutputMeta,
- childItems: childItemMetas,
- ),
- );
- }
- }
- measureData.getItemMetaList = itemMetaList;
- }
- void setAvailableModes(String name) {
- var models = measureData.availableModes;
- measureData.currentMode = name;
- if (models.isNotEmpty) {
- ///群组列表
- var groups = models
- .firstWhereOrNull(
- (element) => element.modeName == measureData.currentMode)
- ?.availableGroups;
- if (groups != null && groups.isNotEmpty) {
- ///项目列表
- var folders = groups[0].availableFolders;
- if (folders != null && folders.isNotEmpty) {
- measureData.getMeasureApplicationList =
- folders[0].workingItemNames ?? [];
- if (folders[0].availableItems != null) {
- measureData.itemMetaList = folders[0].availableItems!.toList();
- comboList();
- }
- if (measureData.getMeasureApplicationList.isNotEmpty) {
- changeItem(measureData.getItemMetaList[0]);
- }
- }
- }
- }
- setState(() {});
- }
- @override
- void initState() {
- super.initState();
- measureData.applicationModesChanged.addListener(applicationModesChanged);
- application.visualAreaChanged.addListener(visualAreaChanged);
- }
- @override
- void dispose() {
- super.dispose();
- measureData.applicationModesChanged.removeListener(applicationModesChanged);
- application.visualAreaChanged.removeListener(visualAreaChanged);
- }
- @override
- FWidget build(BuildContext context) {
- return FContainer(
- width: 300,
- height: 50,
- alignment: Alignment.topCenter,
- padding: const EdgeInsets.symmetric(horizontal: 15),
- child: FGridView.count(
- shrinkWrap: true,
- crossAxisCount: 4,
- crossAxisSpacing: 10,
- mainAxisSpacing: 10,
- childAspectRatio: 1 / 0.5,
- children: measureData.applicationModes.asMap().entries.map((e) {
- final bool isACtiveModes =
- measureData.currentMode == e.value.type.name;
- return FInkWell(
- onTap: () {
- setAvailableModes(e.value.type.name);
- setState(() {});
- },
- child: FContainer(
- alignment: Alignment.center,
- decoration: BoxDecoration(
- border: isACtiveModes
- ? Border.all(
- color: FTheme.ins.colorScheme.primary,
- )
- : Border.all(
- color: Colors.grey,
- ),
- borderRadius: BorderRadius.circular(4),
- color: isACtiveModes
- ? FTheme.ins.colorScheme.primary
- : Colors.grey,
- ),
- child: FText(
- e.value.displayName,
- style: const TextStyle(
- color: Colors.white,
- ),
- ),
- ),
- );
- }).toList(),
- ),
- );
- }
- }
|