Schaban

Add onPageCalled

@@ -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();