Showing
3 changed files
with
34 additions
and
16 deletions
| @@ -190,14 +190,15 @@ class GetCupertinoApp extends StatelessWidget { | @@ -190,14 +190,15 @@ class GetCupertinoApp extends StatelessWidget { | ||
| 190 | Route<dynamic> generator(RouteSettings settings) { | 190 | Route<dynamic> generator(RouteSettings settings) { |
| 191 | var match = Get.routeTree.matchRoute(settings.name); | 191 | var match = Get.routeTree.matchRoute(settings.name); |
| 192 | 192 | ||
| 193 | - final redirect = | ||
| 194 | - MiddlewareRunner(match.route.middlewares).runOnPageCalled(); | ||
| 195 | - if (!redirect.isNullOrBlank) { | 193 | + var runner = MiddlewareRunner(match.route.middlewares); |
| 194 | + var redirect = runner.runRedirect(); | ||
| 195 | + while (!redirect.isNullOrBlank) { | ||
| 196 | match = Get.routeTree.matchRoute(redirect); | 196 | match = Get.routeTree.matchRoute(redirect); |
| 197 | + runner = MiddlewareRunner(match.route.middlewares); | ||
| 198 | + redirect = runner.runRedirect(); | ||
| 197 | } | 199 | } |
| 198 | 200 | ||
| 199 | Get.parameters = match?.parameters; | 201 | Get.parameters = match?.parameters; |
| 200 | - | ||
| 201 | if (match?.route == null) { | 202 | if (match?.route == null) { |
| 202 | return GetPageRoute( | 203 | return GetPageRoute( |
| 203 | page: unknownRoute.page, | 204 | page: unknownRoute.page, |
| @@ -218,6 +219,7 @@ class GetCupertinoApp extends StatelessWidget { | @@ -218,6 +219,7 @@ class GetCupertinoApp extends StatelessWidget { | ||
| 218 | ); | 219 | ); |
| 219 | } | 220 | } |
| 220 | 221 | ||
| 222 | + match.route = runner.runOnPageCalled(match.route); | ||
| 221 | return GetPageRoute( | 223 | return GetPageRoute( |
| 222 | page: match.route.page, | 224 | page: match.route.page, |
| 223 | parameter: match.route.parameter, | 225 | parameter: match.route.parameter, |
| @@ -202,7 +202,7 @@ class GetMaterialApp extends StatelessWidget { | @@ -202,7 +202,7 @@ class GetMaterialApp extends StatelessWidget { | ||
| 202 | var match = Get.routeTree.matchRoute(settings.name); | 202 | var match = Get.routeTree.matchRoute(settings.name); |
| 203 | 203 | ||
| 204 | final redirect = | 204 | final redirect = |
| 205 | - MiddlewareRunner(match.route.middlewares).runOnPageCalled(); | 205 | + MiddlewareRunner(match.route.middlewares).runRedirect(); |
| 206 | if (!redirect.isNullOrBlank) { | 206 | if (!redirect.isNullOrBlank) { |
| 207 | match = Get.routeTree.matchRoute(redirect); | 207 | match = Get.routeTree.matchRoute(redirect); |
| 208 | } | 208 | } |
| @@ -22,7 +22,7 @@ abstract class _RouteMiddleware { | @@ -22,7 +22,7 @@ abstract class _RouteMiddleware { | ||
| 22 | /// you can use it to redirect befor anything in this page happend. | 22 | /// you can use it to redirect befor anything in this page happend. |
| 23 | /// {@tool snippet} | 23 | /// {@tool snippet} |
| 24 | /// ```dart | 24 | /// ```dart |
| 25 | - /// GetPage onPageCalled( ) { | 25 | + /// GetPage redirect( ) { |
| 26 | /// final authService = Get.find<AuthService>(); | 26 | /// final authService = Get.find<AuthService>(); |
| 27 | /// return authService.isAuthed ? null : '/login'; | 27 | /// return authService.isAuthed ? null : '/login'; |
| 28 | /// } | 28 | /// } |
| @@ -30,6 +30,19 @@ abstract class _RouteMiddleware { | @@ -30,6 +30,19 @@ abstract class _RouteMiddleware { | ||
| 30 | /// {@end-tool} | 30 | /// {@end-tool} |
| 31 | String redirect(); | 31 | String redirect(); |
| 32 | 32 | ||
| 33 | + /// This function will be called when this Page is called | ||
| 34 | + /// you can use it to change something about the page or give it new page | ||
| 35 | + /// {@tool snippet} | ||
| 36 | + /// ```dart | ||
| 37 | + /// GetPage onPageCalled(GetPage page) { | ||
| 38 | + /// final authService = Get.find<AuthService>(); | ||
| 39 | + /// page.title = 'Wellcome ${authService.UserName}'; | ||
| 40 | + /// return page; | ||
| 41 | + /// } | ||
| 42 | + /// ``` | ||
| 43 | + /// {@end-tool} | ||
| 44 | + GetPage onPageCalled(GetPage page); | ||
| 45 | + | ||
| 33 | /// This function will be called right before the [Bindings] are initialize. | 46 | /// This function will be called right before the [Bindings] are initialize. |
| 34 | /// Here you can change [Bindings] for this page | 47 | /// Here you can change [Bindings] for this page |
| 35 | List<Bindings> onBindingsStart(List<Bindings> bindings); | 48 | List<Bindings> onBindingsStart(List<Bindings> bindings); |
| @@ -55,18 +68,22 @@ class GetMiddleware implements _RouteMiddleware { | @@ -55,18 +68,22 @@ class GetMiddleware implements _RouteMiddleware { | ||
| 55 | GetMiddleware({this.priority}); | 68 | GetMiddleware({this.priority}); |
| 56 | 69 | ||
| 57 | @override | 70 | @override |
| 71 | + String redirect() => ''; | ||
| 72 | + | ||
| 73 | + @override | ||
| 74 | + GetPage onPageCalled(GetPage page) => page; | ||
| 75 | + | ||
| 76 | + @override | ||
| 58 | List<Bindings> onBindingsStart(List<Bindings> bindings) => bindings; | 77 | List<Bindings> onBindingsStart(List<Bindings> bindings) => bindings; |
| 59 | 78 | ||
| 60 | @override | 79 | @override |
| 61 | GetPageBuilder onPageBuildStart(GetPageBuilder page) => page; | 80 | GetPageBuilder onPageBuildStart(GetPageBuilder page) => page; |
| 81 | + | ||
| 62 | @override | 82 | @override |
| 63 | Widget onPageBuilt(Widget page) => page; | 83 | Widget onPageBuilt(Widget page) => page; |
| 64 | 84 | ||
| 65 | @override | 85 | @override |
| 66 | void onPageDispose() {} | 86 | void onPageDispose() {} |
| 67 | - | ||
| 68 | - @override | ||
| 69 | - String redirect() => ''; | ||
| 70 | } | 87 | } |
| 71 | 88 | ||
| 72 | class MiddlewareRunner { | 89 | class MiddlewareRunner { |
| @@ -82,15 +99,14 @@ class MiddlewareRunner { | @@ -82,15 +99,14 @@ class MiddlewareRunner { | ||
| 82 | return <GetMiddleware>[]; | 99 | return <GetMiddleware>[]; |
| 83 | } | 100 | } |
| 84 | 101 | ||
| 85 | - List<GetMiddleware> getMiddlewares() { | ||
| 86 | - if (_middlewares != null) { | ||
| 87 | - _middlewares.sort((a, b) => a.priority.compareTo(b.priority)); | ||
| 88 | - return _middlewares; | ||
| 89 | - } | ||
| 90 | - return <GetMiddleware>[]; | 102 | + GetPage runOnPageCalled(GetPage page) { |
| 103 | + _getMiddlewares().forEach((element) { | ||
| 104 | + page = element.onPageCalled(page); | ||
| 105 | + }); | ||
| 106 | + return page; | ||
| 91 | } | 107 | } |
| 92 | 108 | ||
| 93 | - String runOnPageCalled() { | 109 | + String runRedirect() { |
| 94 | var to = ''; | 110 | var to = ''; |
| 95 | _getMiddlewares().forEach((element) { | 111 | _getMiddlewares().forEach((element) { |
| 96 | to = element.redirect(); | 112 | to = element.redirect(); |
-
Please register or login to post a comment