Просмотр исходного кода

Merge branch 'feature_custom_transition_settings' of https://github.com/SvenSchoene/fluro into SvenSchoene-feature_custom_transition_settings

lukepighetti 5 лет назад
Родитель
Сommit
f316c37480
2 измененных файлов с 15 добавлено и 4 удалено
  1. 2 1
      lib/src/common.dart
  2. 13 3
      lib/src/fluro_router.dart

+ 2 - 1
lib/src/common.dart

@@ -36,8 +36,9 @@ class AppRoute {
   dynamic handler;
   TransitionType transitionType;
   Duration transitionDuration;
+  RouteTransitionsBuilder transitionBuilder;
   AppRoute(this.route, this.handler,
-      {this.transitionType, this.transitionDuration});
+      {this.transitionType, this.transitionDuration, this.transitionBuilder});
 }
 
 enum TransitionType {

+ 13 - 3
lib/src/fluro_router.dart

@@ -28,11 +28,13 @@ class FluroRouter {
   void define(String routePath,
       {@required Handler handler,
       TransitionType transitionType,
-      Duration transitionDuration = const Duration(milliseconds: 250)}) {
+      Duration transitionDuration = const Duration(milliseconds: 250),
+      RouteTransitionsBuilder transitionBuilder}) {
     _routeTree.addRoute(
       AppRoute(routePath, handler,
           transitionType: transitionType,
-          transitionDuration: transitionDuration),
+          transitionDuration: transitionDuration,
+          transitionBuilder: transitionBuilder),
     );
   }
 
@@ -120,6 +122,11 @@ class FluroRouter {
     }
     AppRouteMatch match = _routeTree.matchRoute(path);
     AppRoute route = match?.route;
+
+    if (route.transitionDuration != null) {
+      transitionDuration = route.transitionDuration;
+    }
+
     Handler handler = (route != null ? route.handler : notFoundHandler);
     var transition = transitionType;
     if (transitionType == null) {
@@ -181,11 +188,14 @@ class FluroRouter {
             });
       } else {
         var routeTransitionsBuilder;
+
         if (transition == TransitionType.custom) {
-          routeTransitionsBuilder = transitionsBuilder;
+          routeTransitionsBuilder =
+              transitionsBuilder ?? route.transitionBuilder;
         } else {
           routeTransitionsBuilder = _standardTransitionsBuilder(transition);
         }
+
         return PageRouteBuilder<dynamic>(
           settings: routeSettings,
           maintainState: maintainState,