convert.dart 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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(LengthMap());
  41. _add(TimeMap());
  42. _add(SpeedMap());
  43. _add(AreaMap());
  44. _add(VolumeMap());
  45. _add(WeightMap());
  46. _add(PressureMap());
  47. }
  48. void _add(UnitMapBase item) {
  49. _map[item.unit] = item;
  50. }
  51. }