convert.dart 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import 'package:fis_measure/process/unit/convert/length.dart';
  2. import 'package:fis_measure/process/unit/convert/speed.dart';
  3. import 'package:fis_measure/process/unit/convert/area.dart';
  4. import 'package:fis_measure/process/unit/convert/time.dart';
  5. import 'package:vid/us/vid_us_unit.dart';
  6. import 'abstract.dart';
  7. import 'volume.dart';
  8. import 'pressure.dart';
  9. import 'weight.dart';
  10. /// 单位数值转换器
  11. class UnitValueConverter {
  12. static UnitValueConverter? _ins;
  13. static UnitValueConverter get _singleton {
  14. if (_ins == null) {
  15. _ins = UnitValueConverter._();
  16. _ins!._init();
  17. }
  18. return _ins!;
  19. }
  20. UnitValueConverter._();
  21. final _map = <VidUsUnit, UnitMapBase>{};
  22. /// 转换为目标单位的值
  23. ///
  24. /// [unit] 当前单位
  25. ///
  26. /// [targetUnit] 目标单位
  27. ///
  28. /// [value] 当前单位值
  29. static double convert(VidUsUnit unit, VidUsUnit targetUnit, double value) {
  30. final result = _singleton._findUnitExt(unit)?.convert(targetUnit, value);
  31. return result ?? value;
  32. }
  33. UnitMapBase? _findUnitExt(VidUsUnit unit) {
  34. if (_map.containsKey(unit)) {
  35. return _map[unit];
  36. }
  37. return null;
  38. }
  39. void _init() {
  40. _add(LengthMapCM());
  41. _add(LengthMapMM());
  42. _add(TimeMap());
  43. _add(SpeedMapCM());
  44. _add(SpeedMapMM());
  45. _add(AreaMap());
  46. _add(VolumeMap());
  47. _add(WeightMap());
  48. _add(PressureMap());
  49. }
  50. void _add(UnitMapBase item) {
  51. _map[item.unit] = item;
  52. }
  53. }