@@ -11,6 +11,9 @@ class AnimatedConfig {
1111 this .skewY,
1212 this .rotateX,
1313 this .rotateY,
14+ this .scaleX,
15+ this .scaleY,
16+ this .rotate,
1417 });
1518 final double opacity;
1619 final double scale;
@@ -20,11 +23,12 @@ class AnimatedConfig {
2023 final double skewY;
2124 final double rotateX;
2225 final double rotateY;
23-
24-
26+ final double scaleX;
27+ final double scaleY;
28+ final double rotate;
2529}
2630
27- enum AnimatedType { opacity, scale, translateX, translateY, skewX, skewY, rotateX, rotateY }
31+ enum AnimatedType { opacity, scale, translateX, translateY, skewX, skewY, rotateX, rotateY, scaleX, scaleY, rotate }
2832
2933const Duration _kDefaultDuration = const Duration (seconds: 1 );
3034
@@ -70,13 +74,13 @@ class SmartAnimatedWidgetState extends State<SmartAnimatedWidget> with SingleTic
7074 }
7175 _controller.addStatusListener ((status) {
7276 if (status == AnimationStatus .completed) {
73- if (widget.onTransitionEnd!= null )widget.onTransitionEnd ();
77+ if (widget.onTransitionEnd != null ) widget.onTransitionEnd ();
7478 _animating = false ;
7579 }
7680 });
7781 }
7882
79- reset (){
83+ reset () {
8084 _controller? .reset ();
8185 }
8286
@@ -106,7 +110,8 @@ class SmartAnimatedWidgetState extends State<SmartAnimatedWidget> with SingleTic
106110
107111 Widget buildWidget (Widget _child) {
108112 InterpolationTween opacityTween;
109- InterpolationTween scaleTween;
113+ InterpolationTween scaleXTween;
114+ InterpolationTween scaleYTween;
110115 InterpolationTween translateXTween;
111116 InterpolationTween translateYTween;
112117 InterpolationTween skewXTween;
@@ -117,17 +122,19 @@ class SmartAnimatedWidgetState extends State<SmartAnimatedWidget> with SingleTic
117122 if (widget.from != null && widget.to != null ) {
118123 AnimatedConfig fc = widget.from;
119124 AnimatedConfig tc = widget.to;
120- scaleTween = InterpolationTween (inputRange: inputRange, outputRange: [fc.scale?? 1 , tc.scale?? 1 ], curve: widget.curve);
121- translateXTween = InterpolationTween (inputRange: inputRange, outputRange: [fc.translateX?? 0 , tc.translateX?? 0 ], curve: widget.curve);
122- translateYTween = InterpolationTween (inputRange: inputRange, outputRange: [fc.translateY?? 0 , tc.translateY?? 0 ], curve: widget.curve);
123- skewXTween = InterpolationTween (inputRange: inputRange, outputRange: [fc.skewX?? 0 , tc.skewX?? 0 ], curve: widget.curve);
124- skewYTween = InterpolationTween (inputRange: inputRange, outputRange: [fc.skewY?? 0 , tc.skewY?? 0 ], curve: widget.curve);
125- rotateXTween = InterpolationTween (inputRange: inputRange, outputRange: [fc.rotateX?? 0 , tc.rotateX?? 0 ], curve: widget.curve);
126- rotateYTween = InterpolationTween (inputRange: inputRange, outputRange: [fc.rotateY?? 0 , tc.rotateY?? 0 ], curve: widget.curve);
127- opacityTween = InterpolationTween (inputRange: inputRange, outputRange: [fc.opacity?? 1 , tc.opacity?? 1 ], curve: widget.curve);
125+ scaleXTween = InterpolationTween (inputRange: inputRange, outputRange: [fc.scaleX ?? fc.scale ?? 1 , tc.scaleX ?? tc.scale ?? 1 ], curve: widget.curve);
126+ scaleYTween = InterpolationTween (inputRange: inputRange, outputRange: [fc.scaleY ?? fc.scale ?? 1 , tc.scaleY ?? tc.scale ?? 1 ], curve: widget.curve);
127+ translateXTween = InterpolationTween (inputRange: inputRange, outputRange: [fc.translateX ?? 0 , tc.translateX ?? 0 ], curve: widget.curve);
128+ translateYTween = InterpolationTween (inputRange: inputRange, outputRange: [fc.translateY ?? 0 , tc.translateY ?? 0 ], curve: widget.curve);
129+ skewXTween = InterpolationTween (inputRange: inputRange, outputRange: [fc.skewX ?? 0 , tc.skewX ?? 0 ], curve: widget.curve);
130+ skewYTween = InterpolationTween (inputRange: inputRange, outputRange: [fc.skewY ?? 0 , tc.skewY ?? 0 ], curve: widget.curve);
131+ rotateXTween = InterpolationTween (inputRange: inputRange, outputRange: [fc.rotateX ?? fc.rotate ?? 0 , tc.rotateX ?? tc.rotate ?? 0 ], curve: widget.curve);
132+ rotateYTween = InterpolationTween (inputRange: inputRange, outputRange: [fc.rotateY ?? fc.rotate ?? 0 , tc.rotateY ?? tc.rotate ?? 0 ], curve: widget.curve);
133+ opacityTween = InterpolationTween (inputRange: inputRange, outputRange: [fc.opacity ?? 1 , tc.opacity ?? 1 ], curve: widget.curve);
128134 }
129135 if (widget.configMap != null ) {
130- List <double > scaleOutRange = [], scaleInputRange = [];
136+ List <double > scaleXOutRange = [], scaleXInputRange = [];
137+ List <double > scaleYOutRange = [], scaleYInputRange = [];
131138 List <double > translateXOutRange = [], translateXInputRange = [];
132139 List <double > translateYOutRange = [], translateYInputRange = [];
133140 List <double > skewXOutRange = [], skewXInputRange = [];
@@ -141,10 +148,15 @@ class SmartAnimatedWidgetState extends State<SmartAnimatedWidget> with SingleTic
141148 for (int i = 0 ; i < keysList.length; i++ ) {
142149 double key = keysList.elementAt (i);
143150 AnimatedConfig config = configs[key];
144- if (config.scale != null ) {
145- scaleInputRange .add (key);
146- scaleOutRange .add (config.scale);
151+ if (config.scaleX != null || config. scale != null ) {
152+ scaleXInputRange .add (key);
153+ scaleXOutRange .add (config.scaleX ?? config.scale);
147154 }
155+ if (config.scaleY != null || config.scale != null ) {
156+ scaleYInputRange.add (key);
157+ scaleYOutRange.add (config.scaleY ?? config.scale);
158+ }
159+
148160 if (config.translateX != null ) {
149161 translateXInputRange.add (key);
150162 translateXOutRange.add (config.translateX);
@@ -161,13 +173,13 @@ class SmartAnimatedWidgetState extends State<SmartAnimatedWidget> with SingleTic
161173 skewYInputRange.add (key);
162174 skewYOutRange.add (config.skewY);
163175 }
164- if (config.rotateX != null ) {
176+ if (config.rotateX != null || config.rotate != null ) {
165177 rotateXInputRange.add (key);
166- rotateXOutRange.add (config.rotateX);
178+ rotateXOutRange.add (config.rotateX ?? config.rotate );
167179 }
168- if (config.rotateY != null ) {
180+ if (config.rotateY != null || config.rotate != null ) {
169181 rotateYInputRange.add (key);
170- rotateYOutRange.add (config.rotateY);
182+ rotateYOutRange.add (config.rotateY ?? config.rotate );
171183 }
172184 if (config.opacity != null ) {
173185 opacityInputRange.add (key);
@@ -186,22 +198,36 @@ class SmartAnimatedWidgetState extends State<SmartAnimatedWidget> with SingleTic
186198 AnimatedType .skewY: 0 ,
187199 AnimatedType .rotateX: 0 ,
188200 AnimatedType .rotateY: 0 ,
201+ AnimatedType .scaleY: 1 ,
202+ AnimatedType .scaleX: 1
189203 };
204+
190205 ///获取默认的输出
191206 List <double > _defaultOR (List <double > or, AnimatedType type) => or.length > 0 ? or : [_defaultORMap[type], _defaultORMap[type]];
192-
193- scaleTween = InterpolationTween (inputRange: _defaultIR (scaleInputRange), outputRange: _defaultOR (scaleOutRange, AnimatedType .scale), curve: widget.curve);
194- translateXTween = InterpolationTween (inputRange: _defaultIR (translateXInputRange), outputRange: _defaultOR (translateXOutRange, AnimatedType .translateX), curve: widget.curve);
195- translateYTween = InterpolationTween (inputRange: _defaultIR (translateYInputRange), outputRange: _defaultOR (translateYOutRange, AnimatedType .translateY), curve: widget.curve);
207+ scaleXTween =
208+ InterpolationTween (inputRange: _defaultIR (scaleXInputRange), outputRange: _defaultOR (scaleXOutRange, AnimatedType .scaleX), curve: widget.curve);
209+ scaleYTween =
210+ InterpolationTween (inputRange: _defaultIR (scaleYInputRange), outputRange: _defaultOR (scaleYOutRange, AnimatedType .scaleY), curve: widget.curve);
211+ translateXTween = InterpolationTween (
212+ inputRange: _defaultIR (translateXInputRange), outputRange: _defaultOR (translateXOutRange, AnimatedType .translateX), curve: widget.curve);
213+ translateYTween = InterpolationTween (
214+ inputRange: _defaultIR (translateYInputRange), outputRange: _defaultOR (translateYOutRange, AnimatedType .translateY), curve: widget.curve);
196215 skewXTween = InterpolationTween (inputRange: _defaultIR (skewXInputRange), outputRange: _defaultOR (skewXOutRange, AnimatedType .skewX), curve: widget.curve);
197216 skewYTween = InterpolationTween (inputRange: _defaultIR (skewYInputRange), outputRange: _defaultOR (skewYOutRange, AnimatedType .skewY), curve: widget.curve);
198- rotateXTween = InterpolationTween (inputRange: _defaultIR (rotateXInputRange), outputRange: _defaultOR (rotateXOutRange, AnimatedType .rotateX), curve: widget.curve);
199- rotateYTween = InterpolationTween (inputRange: _defaultIR (rotateYInputRange), outputRange: _defaultOR (rotateYOutRange, AnimatedType .rotateY), curve: widget.curve);
200- opacityTween = InterpolationTween (inputRange: _defaultIR (opacityInputRange), outputRange: _defaultOR (opacityOutRange, AnimatedType .opacity), curve: widget.curve);
217+ rotateXTween =
218+ InterpolationTween (inputRange: _defaultIR (rotateXInputRange), outputRange: _defaultOR (rotateXOutRange, AnimatedType .rotateX), curve: widget.curve);
219+ rotateYTween =
220+ InterpolationTween (inputRange: _defaultIR (rotateYInputRange), outputRange: _defaultOR (rotateYOutRange, AnimatedType .rotateY), curve: widget.curve);
221+ opacityTween =
222+ InterpolationTween (inputRange: _defaultIR (opacityInputRange), outputRange: _defaultOR (opacityOutRange, AnimatedType .opacity), curve: widget.curve);
201223 }
202224
203- return Transform .scale (
204- scale: scaleTween.evaluate (_animation),
225+ return Transform (
226+ transform: Matrix4 .diagonal3Values (
227+ scaleXTween.evaluate (_animation),
228+ scaleYTween.evaluate (_animation),
229+ 1.0 ,
230+ ),
205231 child: Transform .translate (
206232 offset: Offset (
207233 translateXTween.evaluate (_animation),
0 commit comments