router.dart 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. part of router;
  2. class Router {
  3. /// The tree structure that stores the defined routes
  4. RouteTree _routeTree = new RouteTree();
  5. /// Generic handler for when a route has not been defined
  6. AppRoute notFoundRoute;
  7. /// Creates a custom [Route] definition
  8. void defineRoute(String routePath, {@required RouteCreator creator}) {
  9. _routeTree.addRoute(new AppRoute(routePath, creator));
  10. }
  11. /// Creates a [PageRoute] definition for the passed [RouteHandler]. You can optionally provide a custom
  12. /// transition builder for the route.
  13. void defineRouteHandler(String routePath, {@required RouteHandler handler, RouteTransitionsBuilder transitionsBuilder,
  14. Duration duration = const Duration(milliseconds: 250)})
  15. {
  16. RouteCreator creator = (RouteSettings routeSettings, Map<String, String> params) {
  17. return new PageRouteBuilder(settings: routeSettings, transitionDuration: duration,
  18. transitionsBuilder: transitionsBuilder,
  19. pageBuilder: (BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation) {
  20. return handler(params);
  21. });
  22. };
  23. _routeTree.addRoute(new AppRoute(routePath, creator));
  24. }
  25. /// Creates a [MaterialPageRoute] definition
  26. void defineMaterialRoute(String routePath, {@required RouteHandler handler}) {
  27. RouteCreator creator = (RouteSettings routeSettings, Map<String, String> params) {
  28. return new MaterialPageRoute<Null>(settings: routeSettings, builder: (BuildContext context) {
  29. return handler(params);
  30. });
  31. };
  32. _routeTree.addRoute(new AppRoute(routePath, creator));
  33. }
  34. void addRoute(AppRoute route) {
  35. _routeTree.addRoute(route);
  36. }
  37. AppRoute match(String path) {
  38. AppRouteMatch match = _routeTree.matchRoute(path);
  39. return match?.route ?? notFoundRoute;
  40. }
  41. /// used by the [MaterialApp.onGenerateRoute] function as callback to
  42. /// create a route that is able to be consumed.
  43. Route<Null> generator(RouteSettings routeSettings) {
  44. AppRouteMatch match = _routeTree.matchRoute(routeSettings.name);
  45. AppRoute route = match?.route ?? notFoundRoute;
  46. if (route == null) {
  47. return null;
  48. }
  49. Map<String, String> parameters = match?.parameters ?? <String, String>{};
  50. return route.routeCreator(routeSettings, parameters);
  51. }
  52. /// Prints the route tree so you can analyze it.
  53. void printTree() {
  54. _routeTree.printTree();
  55. }
  56. }