controller property

AnimationController? get controller

Implementation

AnimationController? get controller {
  var parents = Queue<Animation<double>>();
  parents.add(parent!);

  while (parents.isNotEmpty) {
    var parent = parents.removeFirst();

    if (parent is AnimationController) {
      return parent;
    }

    final parentsToAdd = <Animation<double>>[];

    if (parent is AnimationWithParentMixin) {
      parentsToAdd.add(
        (parent as AnimationWithParentMixin).parent as Animation<double>,
      );
    } else if (parent is ProxyAnimation) {
      parentsToAdd.add(parent.parent as Animation<double>);
    } else if (parent is CurvedAnimation) {
      parentsToAdd.add(parent.parent);
    } else if (parent is ReverseAnimation) {
      parentsToAdd.add(parent.parent);
    } else if (parent is CompoundAnimation) {
      parentsToAdd
          .add((parent as CompoundAnimation).first as Animation<double>);
      parentsToAdd
          .add((parent as CompoundAnimation).next as Animation<double>);
    } else if (parent is TrainHoppingAnimation) {
      // TODO: Next train?
      parentsToAdd.add(parent.currentTrain as Animation<double>);
    }

    parents.addAll(parentsToAdd);
  }

  return null;
}