focusOnCoordinates method
void
focusOnCoordinates(
- GlobeCoordinates coordinates, {
- required bool animate,
- required Duration? duration,
- Curve curve = Curves.linear,
Focus on the specified coordinates on the sphere.
Implementation
void focusOnCoordinates(GlobeCoordinates coordinates,
{required bool animate,
required Duration? duration,
Curve curve = Curves.linear}) {
double latRad = radians(coordinates.latitude);
double lonRad = radians(-coordinates.longitude);
final targetRotationZ = -lonRad;
final targetRotationY = -latRad;
final targetRotationX = latRad;
if (animate) {
final initialRotationZ = rotationZ;
final initialRotationX = rotationX;
final initialRotationY = rotationY;
final rZ = targetRotationZ - initialRotationZ;
final rX = targetRotationX - initialRotationX;
final rY = targetRotationY - initialRotationY;
_genericCurvedAnimation?.dispose();
genericAnimationController?.dispose();
genericAnimationController = AnimationController(
vsync: this,
duration: duration,
);
_genericCurvedAnimation = CurvedAnimation(
parent: genericAnimationController!,
curve: curve,
);
_genericCurvedAnimation!.addListener(() {
double animationFactor = _genericCurvedAnimation!.value;
rotationX = initialRotationX + rX * animationFactor;
rotationY = initialRotationY + rY * animationFactor;
rotationZ = initialRotationZ + rZ * animationFactor;
setState(() {});
});
genericAnimationController!.forward();
} else {
rotationX = targetRotationX;
rotationY = targetRotationY;
rotationZ = targetRotationZ;
setState(() {});
}
}