import 'package:fis_measure/process/unit/convert/length.dart'; import 'package:fis_measure/process/unit/convert/speed.dart'; import 'package:fis_measure/process/unit/convert/area.dart'; import 'package:fis_measure/process/unit/convert/time.dart'; import 'package:vid/us/vid_us_unit.dart'; import 'abstract.dart'; import 'volume.dart'; import 'pressure.dart'; import 'weight.dart'; /// 单位数值转换器 class UnitValueConverter { static UnitValueConverter? _ins; static UnitValueConverter get _singleton { if (_ins == null) { _ins = UnitValueConverter._(); _ins!._init(); } return _ins!; } UnitValueConverter._(); final _map = {}; /// 转换为目标单位的值 /// /// [unit] 当前单位 /// /// [targetUnit] 目标单位 /// /// [value] 当前单位值 static double convert(VidUsUnit unit, VidUsUnit targetUnit, double value) { final result = _singleton._findUnitExt(unit)?.convert(targetUnit, value); return result ?? value; } UnitMapBase? _findUnitExt(VidUsUnit unit) { if (_map.containsKey(unit)) { return _map[unit]; } return null; } void _init() { _add(LengthMapCM()); _add(LengthMapMM()); _add(TimeMap()); _add(SpeedMapCM()); _add(SpeedMapMM()); _add(AreaMap()); _add(VolumeMap()); _add(WeightMap()); _add(PressureMap()); } void _add(UnitMapBase item) { _map[item.unit] = item; } }