Found out a strange problem when I was creating a rotation animation for an Icon.
I use RotationTransition
to animate Icons.sync
. And I also use Transform
because I need a mirrored version of the icon. The results is strange – it is not rotating, but moving by circular trajectory and then breaking. Without Transform
everything is OK.
How it works now (new clicks on the button doesn’t start animation, only page loading starts it):
How it works without Transform
(as expexted)
The animated icon widget code:
class _AnimatedSyncIconState extends State<AnimatedSyncIcon>
with SingleTickerProviderStateMixin {
late final AnimationController controller;
late final Animation<double> rotateAnimation;
@override
void initState() {
super.initState();
controller =
AnimationController(vsync: this, duration: const Duration(seconds: 1));
rotateAnimation = CurvedAnimation(parent: controller, curve: Curves.linear);
_animate();
}
@override
void didUpdateWidget(final AnimatedSyncIcon oldWidget) {
super.didUpdateWidget(oldWidget);
if (widget.isActive != oldWidget.isActive) _animate();
}
void _animate() {
if (widget.isActive) {
controller.repeat();
} else {
controller.reset();
}
}
@override
Widget build(final BuildContext context) {
return RotationTransition(
turns: rotateAnimation,
child: Transform(
transform: Matrix4.rotationY(pi),
child: const Icon(Icons.sync),
),
);
}
}
How to make it work properly with the mirrored icon?
2
Answers
Here is an example to animate icon, you may adjust below example code according to your need. i hope it will help you.
you need one simple change, just transform your icon like this:
now your icon will be mirrored and rotating correctly and you don’t even need to import
dart:math
anymore