convert.dart 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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. /// 单位数值转换器
  8. class UnitValueConverter {
  9. static UnitValueConverter? _ins;
  10. static UnitValueConverter get _singleton {
  11. if (_ins == null) {
  12. _ins = UnitValueConverter._();
  13. _ins!._init();
  14. }
  15. return _ins!;
  16. }
  17. UnitValueConverter._();
  18. final _map = <VidUsUnit, UnitMapBase>{};
  19. /// 转换为目标单位的值
  20. ///
  21. /// [unit] 当前单位
  22. ///
  23. /// [targetUnit] 目标单位
  24. ///
  25. /// [value] 当前单位值
  26. static double convert(VidUsUnit unit, VidUsUnit targetUnit, double value) {
  27. final result = _singleton._findUnitExt(unit)?.convert(targetUnit, value);
  28. return result ?? value;
  29. }
  30. UnitMapBase? _findUnitExt(VidUsUnit unit) {
  31. if (_map.containsKey(unit)) {
  32. return _map[unit];
  33. }
  34. return null;
  35. }
  36. void _init() {
  37. _add(LengthMap());
  38. _add(TimeMap());
  39. _add(SpeedMap());
  40. _add(AreaMap());
  41. }
  42. void _add(UnitMapBase item) {
  43. _map[item.unit] = item;
  44. }
  45. }