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