Forráskód Böngészése

add custom transitions as setting for route configuration

Sven Schöne 6 éve
szülő
commit
dc34a3b48a
2 módosított fájl, 29 hozzáadás és 5 törlés
  1. 8 1
      lib/src/common.dart
  2. 21 4
      lib/src/router.dart

+ 8 - 1
lib/src/common.dart

@@ -35,7 +35,14 @@ class AppRoute {
   String route;
   dynamic handler;
   TransitionType transitionType;
-  AppRoute(this.route, this.handler, {this.transitionType});
+  RouteTransitionsBuilder transitionBuilder;
+  Duration transitionDuration;
+  AppRoute(this.route, this.handler,
+      {this.transitionType,
+      this.transitionBuilder,
+      Duration transitionDuration})
+      : this.transitionDuration =
+            transitionDuration ?? const Duration(milliseconds: 250);
 }
 
 enum TransitionType {

+ 21 - 4
lib/src/router.dart

@@ -24,9 +24,17 @@ class Router {
 
   /// Creates a [PageRoute] definition for the passed [RouteHandler]. You can optionally provide a default transition type.
   void define(String routePath,
-      {@required Handler handler, TransitionType transitionType}) {
-    _routeTree.addRoute(
-        new AppRoute(routePath, handler, transitionType: transitionType));
+      {@required Handler handler,
+      TransitionType transitionType,
+      RouteTransitionsBuilder transitionBuilder,
+      Duration transitionDuration}) {
+    _routeTree.addRoute(new AppRoute(
+      routePath,
+      handler,
+      transitionType: transitionType,
+      transitionBuilder: transitionBuilder,
+      transitionDuration: transitionDuration,
+    ));
   }
 
   /// Finds a defined [AppRoute] for the path value. If no [AppRoute] definition was found
@@ -102,6 +110,11 @@ class Router {
     }
     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) {
@@ -133,7 +146,11 @@ class Router {
       } else {
         var routeTransitionsBuilder;
         if (transition == TransitionType.custom) {
-          routeTransitionsBuilder = transitionsBuilder;
+          if (route.transitionBuilder != null) {
+            routeTransitionsBuilder = route.transitionBuilder;
+          } else {
+            routeTransitionsBuilder = transitionsBuilder;
+          }
         } else if (transition == TransitionType.noTransition) {
           routeTransitionsBuilder = _noTransitionBuilder(transition);
         } else {