absoluteAngle property
The resulting angle after all the ancestors and the components own angles and scales have been applied.
Implementation
double get absoluteAngle {
var angle = 0.0;
var totalScaleX = 1.0;
var totalScaleY = 1.0;
final ancestorChain = ancestors(includeSelf: true).toList(growable: false)
..reverse();
for (final ancestor in ancestorChain) {
if (ancestor is ReadOnlyScaleProvider) {
final ancestorScale = (ancestor as ReadOnlyScaleProvider).scale;
totalScaleX *= ancestorScale.x;
totalScaleY *= ancestorScale.y;
if (ancestorScale.x.isNegative) {
angle *= -1;
}
if (ancestorScale.y.isNegative) {
angle -= math.pi - angle;
}
}
if (ancestor is ReadOnlyAngleProvider) {
final reflected = totalScaleX.isNegative ^ totalScaleY.isNegative;
final localAngle = (ancestor as ReadOnlyAngleProvider).angle;
angle += reflected ? -localAngle : localAngle;
}
}
return angle.toNormalizedAngle();
}