calculator.dart 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import 'package:fis_common/event/event_type.dart';
  2. import 'package:fis_measure/interfaces/process/calculators/calculator.dart';
  3. import 'package:fis_measure/interfaces/process/calculators/output.dart';
  4. import 'package:fis_measure/interfaces/process/items/item.dart';
  5. import 'package:flutter/foundation.dart';
  6. abstract class Calculator<T extends IMeasureItem, TValue>
  7. implements ICalculator<TValue> {
  8. final List<OutputItem<TValue>> _outputs = [];
  9. OutputItem<TValue>? _outputItem;
  10. late T _ref;
  11. Calculator(T ref) {
  12. _ref = ref;
  13. }
  14. @override
  15. OutputItem<TValue>? get output => _outputItem;
  16. @protected
  17. set output(OutputItem<TValue>? value) {
  18. if (value != _outputItem) {
  19. _outputItem = value;
  20. outputChanged.emit(this, value);
  21. }
  22. }
  23. @override
  24. List<OutputItem<TValue>> get outputs => _outputs;
  25. T get ref => _ref;
  26. @override
  27. var outputChanged = FEventHandler<OutputItem<TValue>?>();
  28. @override
  29. void finishOnce() {
  30. if (output != null) {
  31. outputs.add(output!);
  32. output = null;
  33. }
  34. }
  35. /// 对double四舍五入
  36. double roundDouble(double value, [int digits = 2]) {
  37. final digitsStr = value.toStringAsFixed(digits);
  38. final result = double.parse(digitsStr);
  39. return result;
  40. }
  41. }