Dart:如何高效初始化多个依赖同一个计算的final字段?

Mar*_*cel 6 dart flutter

我有一个包含多个字段的 Dart 类,这些字段必须是final,因为该类扩展了另一个标有@immutable. 这些字段的值应该在创建类的实例时计算。在 Dart 中,“必须在构造函数体开始之前初始化最终实例变量”(来自 dartlang.org)。在该范围内,您只能调用static方法。

这对我有用,除了某些字段依赖于相同的计算,这意味着相同的计算进行了两次。有没有办法避免这种情况,即通过保存一些临时结果?

我目前的代码:

class _IntegralCurve extends Curve {
  static double delta = 0.01;

  _IntegralCurve(this.original) :
      integral = calculateIntegral(original),
      values = calculateNormalizedValues(original);

  final Curve original;
  final double integral; // Accessible to other classes.
  final Map<double, double> values;

  /// Does the actual integrating work. Called twice.
  static Map<double, double> integrate(Curve original) {
    double integral = 0.0;
    final values = Map<double, double>();

    for (double t = 0.0; t <= 1.0; t += delta) {
      integral += original.transform(t) * delta;
      values[t] = integral;
    }
    values[1.0] = integral;
    return values;
  }

  /// Calculates the integral.
  static double calculateIntegral(Curve curve) => integrate(curve)[1];

  /// Calculates cumulative values.
  static Map<double, double> calculateNormalizedValues(Curve curve) {
    final values = integrate(curve);

    for (final double t in values.keys) {
      values[t] = values[t] / values[1];
    }
    return values;
  }

  double transform(double t) {
    for (final key in values.keys)
      if (key > t)
        return values[key];
    return values[1.0];
  }
}
Run Code Online (Sandbox Code Playgroud)

Gün*_*uer 10

计算工厂构造函数中的值:

class _IntegralCurve extends Curve {
  static double delta = 0.01;

  factory _IntegralCurve(Curve original) {
    final integral = calculateIntegral(original),
    final values = calculateNormalizedValues(original);
    return _IntegralCourve._(original, integral, values);
  }

  _IntegralCurve._(this.original, this.integral, this.values);
Run Code Online (Sandbox Code Playgroud)