Toggle navigation
Toggle navigation
This project
Loading...
Sign in
flutter_package
/
fluttertpc_get
Go to a project
Toggle navigation
Projects
Groups
Snippets
Help
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
Ahmed Fwela
2021-05-31 14:55:53 +0200
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
ebd6bca8b0e204c73d1869aa28aa049228bfc097
ebd6bca8
1 parent
3a4b9cf8
WIP - Improved smart management, bindings,
parameters, etc..
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
42 additions
and
8 deletions
lib/get_navigation/src/nav2/get_router_delegate.dart
lib/get_navigation/src/nav2/get_router_delegate.dart
View file @
ebd6bca
...
...
@@ -9,6 +9,8 @@ class GetDelegate extends RouterDelegate<GetPage>
with
ListenableMixin
,
ListNotifierMixin
{
final
List
<
GetPage
>
routes
=
<
GetPage
>[];
final
pageRoutes
=
<
GetPage
,
GetPageRoute
>{};
GetPage
?
notFoundRoute
;
final
List
<
NavigatorObserver
>?
dipNavObservers
;
...
...
@@ -56,6 +58,7 @@ class GetDelegate extends RouterDelegate<GetPage>
@override
Future
<
void
>
setNewRoutePath
(
GetPage
configuration
)
{
routes
.
clear
();
pageRoutes
.
clear
();
return
pushRoute
(
configuration
);
}
...
...
@@ -67,6 +70,8 @@ class GetDelegate extends RouterDelegate<GetPage>
return
route
;
}
GetPageRoute
?
get
currentRoute
=>
pageRoutes
[
currentConfiguration
];
Future
<
T
?>
toNamed
<
T
>(
String
route
)
{
final
page
=
Get
.
routeTree
.
matchRoute
(
route
);
if
(
page
.
route
!=
null
)
{
...
...
@@ -95,23 +100,25 @@ class GetDelegate extends RouterDelegate<GetPage>
}
Future
<
T
?>
pushRoute
<
T
>(
GetPage
rout
e
,
{
GetPage
pag
e
,
{
bool
removeUntil
=
false
,
bool
replaceCurrent
=
false
,
bool
rebuildStack
=
true
,
})
{
final
completer
=
Completer
<
T
?>();
_resultCompleter
[
rout
e
]
=
completer
;
_resultCompleter
[
pag
e
]
=
completer
;
route
=
rout
e
.
copy
(
unknownRoute:
_notFound
());
page
=
pag
e
.
copy
(
unknownRoute:
_notFound
());
assert
(!(
removeUntil
&&
replaceCurrent
),
'Only removeUntil or replaceCurrent should by true!'
);
if
(
removeUntil
)
{
routes
.
clear
();
pageRoutes
.
clear
();
}
else
if
(
replaceCurrent
&&
routes
.
isNotEmpty
)
{
routes
.
removeLast
();
final
lastPage
=
routes
.
removeLast
();
pageRoutes
.
remove
(
lastPage
);
}
addPage
(
rout
e
);
addPage
(
pag
e
);
if
(
rebuildStack
)
{
refresh
();
}
...
...
@@ -153,7 +160,7 @@ class GetDelegate extends RouterDelegate<GetPage>
}
bool
canPop
()
{
return
routes
.
isNotEmpty
;
return
routes
.
length
>
1
;
}
bool
_onPopPage
(
Route
<
dynamic
>
route
,
dynamic
result
)
{
...
...
@@ -161,14 +168,24 @@ class GetDelegate extends RouterDelegate<GetPage>
if
(!
didPop
)
{
return
false
;
}
routes
.
remove
(
route
.
settings
);
final
settings
=
route
.
settings
;
if
(
settings
is
GetPage
)
{
removePage
(
settings
);
}
refresh
();
return
true
;
}
void
removePage
(
GetPage
page
)
{
final
isLast
=
routes
.
last
==
page
;
//check if it's last
routes
.
remove
(
page
);
final
oldPageRoute
=
pageRoutes
.
remove
(
page
);
if
(
isLast
&&
oldPageRoute
!=
null
)
{
_currentRoutePopped
(
oldPageRoute
);
final
newPageRoute
=
pageRoutes
[
routes
.
last
];
if
(
newPageRoute
!=
null
)
_currentRouteChanged
(
newPageRoute
);
}
refresh
();
}
...
...
@@ -176,11 +193,28 @@ class GetDelegate extends RouterDelegate<GetPage>
routes
.
add
(
route
,
);
final
pageRoute
=
pageRoutes
[
route
]
=
PageRedirect
(
route
,
_notFound
()).
page
();
_currentRouteChanged
(
pageRoute
);
refresh
();
}
void
addRoutes
(
List
<
GetPage
>
pages
)
{
routes
.
addAll
(
pages
);
for
(
var
item
in
pages
)
{
pageRoutes
[
item
]
=
PageRedirect
(
item
,
_notFound
()).
page
();
}
final
pageRoute
=
pageRoutes
[
routes
.
last
];
if
(
pageRoute
!=
null
)
_currentRouteChanged
(
pageRoute
);
refresh
();
}
void
_currentRoutePopped
(
GetPageRoute
route
)
{
route
.
dispose
();
}
void
_currentRouteChanged
(
GetPageRoute
route
)
{
//transition?
//buildPage? -> in router outlet
}
}
...
...
Please
register
or
login
to post a comment