Schaban

Add GetMiddleware

@@ -66,7 +66,7 @@ class GetPageRoute<T> extends PageRoute<T> { @@ -66,7 +66,7 @@ class GetPageRoute<T> extends PageRoute<T> {
66 66
67 final Alignment alignment; 67 final Alignment alignment;
68 68
69 - final List<GetPageMiddleware> middlewares; 69 + final List<GetMiddleware> middlewares;
70 70
71 @override 71 @override
72 final Color barrierColor; 72 final Color barrierColor;
@@ -23,7 +23,7 @@ class GetPage { @@ -23,7 +23,7 @@ class GetPage {
23 final bool fullscreenDialog; 23 final bool fullscreenDialog;
24 final RouteSettings settings; 24 final RouteSettings settings;
25 final List<GetPage> children; 25 final List<GetPage> children;
26 - final List<GetPageMiddleware> middlewares; 26 + final List<GetMiddleware> middlewares;
27 27
28 const GetPage({ 28 const GetPage({
29 @required this.name, 29 @required this.name,
1 import 'package:flutter/cupertino.dart'; 1 import 'package:flutter/cupertino.dart';
2 import '../../../get.dart'; 2 import '../../../get.dart';
3 3
4 -/// The Page Middlewares  
5 -/// The Functions will be called in this order  
6 -/// (( [onPageCalled] -> [onBindingsStart] -> [onPageBuildStart] ->  
7 -/// [onPageBuilt] -> [onPageDispose] ))  
8 -abstract class GetPageMiddleware { 4 +abstract class _RouteMiddleware {
9 /// The Order of the Middlewares to run. 5 /// The Order of the Middlewares to run.
  6 + ///
  7 + /// {@tool snippet}
  8 + /// This Middewares will be called in this order.
  9 + /// ```dart
  10 + /// final middlewares = [
  11 + /// GetMiddleware(priority: 2),
  12 + /// GetMiddleware(priority: 5),
  13 + /// GetMiddleware(priority: 4),
  14 + /// GetMiddleware(priority: -8),
  15 + /// ];
  16 + /// ```
  17 + /// -8 => 2 => 4 => 5
  18 + /// {@end-tool}
10 int priority; 19 int priority;
11 20
12 /// This function will be the first thing to call when this Page is called 21 /// This function will be the first thing to call when this Page is called
@@ -21,11 +30,12 @@ abstract class GetPageMiddleware { @@ -21,11 +30,12 @@ abstract class GetPageMiddleware {
21 /// {@end-tool} 30 /// {@end-tool}
22 String redirect(); 31 String redirect();
23 32
24 - ///This function will be called right before the [Bindings] are initialize. 33 + /// This function will be called right before the [Bindings] are initialize.
25 /// Here you can change [Bindings] for this page 34 /// Here you can change [Bindings] for this page
26 List<Bindings> onBindingsStart(List<Bindings> bindings); 35 List<Bindings> onBindingsStart(List<Bindings> bindings);
27 36
28 /// This function will be called right after the [Bindings] are initialize. 37 /// This function will be called right after the [Bindings] are initialize.
  38 + /// Here you can change the Page to build
29 GetPageBuilder onPageBuildStart(GetPageBuilder page); 39 GetPageBuilder onPageBuildStart(GetPageBuilder page);
30 40
31 // Get the built page 41 // Get the built page
@@ -34,17 +44,50 @@ abstract class GetPageMiddleware { @@ -34,17 +44,50 @@ abstract class GetPageMiddleware {
34 void onPageDispose(); 44 void onPageDispose();
35 } 45 }
36 46
  47 +/// The Page Middlewares.
  48 +/// The Functions will be called in this order
  49 +/// (( [redirect] -> [onBindingsStart] -> [onPageBuildStart] ->
  50 +/// [onPageBuilt] -> [onPageDispose] ))
  51 +class GetMiddleware implements _RouteMiddleware {
  52 + @override
  53 + int priority = 0;
  54 +
  55 + GetMiddleware({this.priority});
  56 +
  57 + @override
  58 + List<Bindings> onBindingsStart(List<Bindings> bindings) => bindings;
  59 +
  60 + @override
  61 + GetPageBuilder onPageBuildStart(GetPageBuilder page) => page;
  62 + @override
  63 + Widget onPageBuilt(Widget page) => page;
  64 +
  65 + @override
  66 + void onPageDispose() {}
  67 +
  68 + @override
  69 + String redirect() => '';
  70 +}
  71 +
37 class MiddlewareRunner { 72 class MiddlewareRunner {
38 MiddlewareRunner(this._middlewares); 73 MiddlewareRunner(this._middlewares);
39 74
40 - final List<GetPageMiddleware> _middlewares; 75 + final List<GetMiddleware> _middlewares;
  76 +
  77 + List<GetMiddleware> _getMiddlewares() {
  78 + if (_middlewares != null) {
  79 + _middlewares.sort((a, b) => a.priority.compareTo(b.priority));
  80 + return _middlewares;
  81 + }
  82 + return <GetMiddleware>[];
  83 + }
41 84
42 - List<GetPageMiddleware> _getMiddlewares() { 85 + List<GetMiddleware> getMiddlewares() {
43 if (_middlewares != null) { 86 if (_middlewares != null) {
44 _middlewares.sort((a, b) => a.priority.compareTo(b.priority)); 87 _middlewares.sort((a, b) => a.priority.compareTo(b.priority));
45 return _middlewares; 88 return _middlewares;
46 } 89 }
47 - return <GetPageMiddleware>[]; 90 + return <GetMiddleware>[];
48 } 91 }
49 92
50 String runOnPageCalled() { 93 String runOnPageCalled() {
  1 +
  2 +main( ) {
  3 +
  4 +}