roi peker

fixed GetPages.curve

- fixes #465
- iOS has an exception to the rule, when no Curve is defined, it doesn't use linearTransition in `CupertinoPages` (`Transition.cupertino/native/default`) and fullscreen dialogs so it applies the Curve, or use the default one.
It might be smarter, maybe, to also enforce the `animation` duration to stay in platforms defaults.
- had to change `CupertinoTransitions.buildTransitions` params in order to make the check and keep the code change small.
1 import 'dart:math'; 1 import 'dart:math';
2 import 'dart:ui' show lerpDouble; 2 import 'dart:ui' show lerpDouble;
  3 +
3 import 'package:flutter/cupertino.dart'; 4 import 'package:flutter/cupertino.dart';
4 import 'package:flutter/gestures.dart'; 5 import 'package:flutter/gestures.dart';
5 import 'package:flutter/material.dart'; 6 import 'package:flutter/material.dart';
@@ -7,6 +8,7 @@ import 'package:get/route_manager.dart'; @@ -7,6 +8,7 @@ import 'package:get/route_manager.dart';
7 import 'package:get/src/core/get_main.dart'; 8 import 'package:get/src/core/get_main.dart';
8 import 'package:get/src/instance/get_instance.dart'; 9 import 'package:get/src/instance/get_instance.dart';
9 import 'package:get/utils.dart'; 10 import 'package:get/utils.dart';
  11 +
10 import 'bindings_interface.dart'; 12 import 'bindings_interface.dart';
11 import 'custom_transition.dart'; 13 import 'custom_transition.dart';
12 import 'default_transitions.dart'; 14 import 'default_transitions.dart';
@@ -136,18 +138,24 @@ class GetPageRoute<T> extends PageRoute<T> { @@ -136,18 +138,24 @@ class GetPageRoute<T> extends PageRoute<T> {
136 @override 138 @override
137 Widget buildTransitions(BuildContext context, Animation<double> animation, 139 Widget buildTransitions(BuildContext context, Animation<double> animation,
138 Animation<double> secondaryAnimation, Widget child) { 140 Animation<double> secondaryAnimation, Widget child) {
  141 + final finalCurve = curve ?? Get.defaultTransitionCurve;
  142 + final hasCurve = curve != null;
139 if (fullscreenDialog && transition == null) { 143 if (fullscreenDialog && transition == null) {
  144 + /// by default, if no curve is defined, use Cupertino transition in the
  145 + /// default way (no linearTransition)... otherwise take the curve passed.
140 return CupertinoFullscreenDialogTransition( 146 return CupertinoFullscreenDialogTransition(
141 - primaryRouteAnimation: animation, 147 + primaryRouteAnimation: hasCurve
  148 + ? CurvedAnimation(parent: animation, curve: finalCurve)
  149 + : animation,
142 secondaryRouteAnimation: secondaryAnimation, 150 secondaryRouteAnimation: secondaryAnimation,
143 child: child, 151 child: child,
144 - linearTransition: true); 152 + linearTransition: hasCurve);
145 } 153 }
146 154
147 if (this.customTransition != null) { 155 if (this.customTransition != null) {
148 return this.customTransition.buildTransition( 156 return this.customTransition.buildTransition(
149 context, 157 context,
150 - curve, 158 + finalCurve,
151 alignment, 159 alignment,
152 animation, 160 animation,
153 secondaryAnimation, 161 secondaryAnimation,
@@ -159,6 +167,10 @@ class GetPageRoute<T> extends PageRoute<T> { @@ -159,6 +167,10 @@ class GetPageRoute<T> extends PageRoute<T> {
159 : child); 167 : child);
160 } 168 }
161 169
  170 + /// Apply the curve by default...
  171 + final iosAnimation = animation;
  172 + animation = CurvedAnimation(parent: animation, curve: finalCurve);
  173 +
162 switch (transition ?? Get.defaultTransition) { 174 switch (transition ?? Get.defaultTransition) {
163 case Transition.leftToRight: 175 case Transition.leftToRight:
164 return SlideLeftTransition().buildTransitions( 176 return SlideLeftTransition().buildTransitions(
@@ -283,9 +295,9 @@ class GetPageRoute<T> extends PageRoute<T> { @@ -283,9 +295,9 @@ class GetPageRoute<T> extends PageRoute<T> {
283 case Transition.cupertino: 295 case Transition.cupertino:
284 return CupertinoTransitions().buildTransitions( 296 return CupertinoTransitions().buildTransitions(
285 context, 297 context,
286 - curve, 298 + hasCurve,
287 alignment, 299 alignment,
288 - animation, 300 + hasCurve ? animation : iosAnimation,
289 secondaryAnimation, 301 secondaryAnimation,
290 popGesture ?? Get.defaultPopGesture 302 popGesture ?? Get.defaultPopGesture
291 ? _CupertinoBackGestureDetector<T>( 303 ? _CupertinoBackGestureDetector<T>(
@@ -335,39 +347,13 @@ class GetPageRoute<T> extends PageRoute<T> { @@ -335,39 +347,13 @@ class GetPageRoute<T> extends PageRoute<T> {
335 : child); 347 : child);
336 348
337 case Transition.native: 349 case Transition.native:
338 - if (GetPlatform.isIOS)  
339 - return CupertinoTransitions().buildTransitions(  
340 - context,  
341 - curve,  
342 - alignment,  
343 - animation,  
344 - secondaryAnimation,  
345 - popGesture ?? Get.defaultPopGesture  
346 - ? _CupertinoBackGestureDetector<T>(  
347 - enabledCallback: () => _isPopGestureEnabled<T>(this),  
348 - onStartPopGesture: () => _startPopGesture<T>(this),  
349 - child: child)  
350 - : child);  
351 -  
352 - return FadeUpwardsPageTransitionsBuilder().buildTransitions(  
353 - this,  
354 - context,  
355 - animation,  
356 - secondaryAnimation,  
357 - popGesture ?? Get.defaultPopGesture  
358 - ? _CupertinoBackGestureDetector<T>(  
359 - enabledCallback: () => _isPopGestureEnabled<T>(this),  
360 - onStartPopGesture: () => _startPopGesture<T>(this),  
361 - child: child)  
362 - : child);  
363 -  
364 default: 350 default:
365 if (GetPlatform.isIOS) 351 if (GetPlatform.isIOS)
366 return CupertinoTransitions().buildTransitions( 352 return CupertinoTransitions().buildTransitions(
367 context, 353 context,
368 - curve, 354 + hasCurve,
369 alignment, 355 alignment,
370 - animation, 356 + hasCurve ? animation : iosAnimation,
371 secondaryAnimation, 357 secondaryAnimation,
372 popGesture ?? Get.defaultPopGesture 358 popGesture ?? Get.defaultPopGesture
373 ? _CupertinoBackGestureDetector<T>( 359 ? _CupertinoBackGestureDetector<T>(
@@ -188,7 +188,7 @@ class SizeTransitions { @@ -188,7 +188,7 @@ class SizeTransitions {
188 class CupertinoTransitions { 188 class CupertinoTransitions {
189 Widget buildTransitions( 189 Widget buildTransitions(
190 BuildContext context, 190 BuildContext context,
191 - Curve curve, 191 + bool useLinearTransition,
192 Alignment alignment, 192 Alignment alignment,
193 Animation<double> animation, 193 Animation<double> animation,
194 Animation<double> secondaryAnimation, 194 Animation<double> secondaryAnimation,
@@ -196,7 +196,7 @@ class CupertinoTransitions { @@ -196,7 +196,7 @@ class CupertinoTransitions {
196 return CupertinoPageTransition( 196 return CupertinoPageTransition(
197 primaryRouteAnimation: animation, 197 primaryRouteAnimation: animation,
198 secondaryRouteAnimation: secondaryAnimation, 198 secondaryRouteAnimation: secondaryAnimation,
199 - linearTransition: true, 199 + linearTransition: useLinearTransition,
200 child: child, 200 child: child,
201 ); 201 );
202 } 202 }