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
Schaban
2020-11-27 09:22:42 +0100
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
639cab566cfeff9dc3f2b10acfb5e15a5628fc77
639cab56
1 parent
a27d206d
Add children to GetPage
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
100 additions
and
7 deletions
lib/get_navigation/src/root/parse_route.dart
lib/get_navigation/src/routes/get_route.dart
test/navigation/parse_route_test.dart
lib/get_navigation/src/root/parse_route.dart
View file @
639cab5
...
...
@@ -5,10 +5,9 @@ class ParseRouteTree {
final
List
<
_ParseRouteTreeNode
>
_nodes
=
<
_ParseRouteTreeNode
>[];
// bool _hasDefaultRoute = false;
void
addRoute
(
GetPage
route
)
{
var
path
=
route
.
name
;
if
(
path
==
Navigator
.
defaultRouteName
)
{
// if (_hasDefaultRoute) {
// throw ("Default route was already defined");
...
...
@@ -46,8 +45,50 @@ class ParseRouteTree {
}
parent
=
node
;
}
// Add Page children.
for
(
var
page
in
_flattenPage
(
route
))
{
addRoute
(
page
);
}
}
List
<
GetPage
>
_flattenPage
(
GetPage
route
)
{
final
result
=
<
GetPage
>[];
if
(
route
.
pages
==
null
||
route
.
pages
.
isEmpty
)
{
return
result
;
}
final
routePath
=
route
.
name
;
for
(
var
page
in
route
.
pages
)
{
result
.
add
(
_changePath
(
page
,
routePath
));
final
children
=
_flattenPage
(
page
);
for
(
var
child
in
children
)
{
result
.
add
(
_changePath
(
child
,
routePath
));
}
}
return
result
;
}
/// Change the Path for a [GetPage]
GetPage
_changePath
(
GetPage
orgin
,
String
routePath
)
=>
GetPage
(
name:
routePath
+
orgin
.
name
,
page:
orgin
.
page
,
title:
orgin
.
title
,
alignment:
orgin
.
alignment
,
transition:
orgin
.
transition
,
binding:
orgin
.
binding
,
bindings:
orgin
.
bindings
,
curve:
orgin
.
curve
,
customTransition:
orgin
.
customTransition
,
fullscreenDialog:
orgin
.
fullscreenDialog
,
maintainState:
orgin
.
maintainState
,
opaque:
orgin
.
opaque
,
parameter:
orgin
.
parameter
,
popGesture:
orgin
.
popGesture
,
settings:
orgin
.
settings
,
transitionDuration:
orgin
.
transitionDuration
,
);
_GetPageMatch
matchRoute
(
String
path
)
{
var
usePath
=
path
;
if
(
usePath
.
startsWith
(
"/"
))
{
...
...
@@ -126,9 +167,7 @@ class ParseRouteTree {
var
match
=
matches
.
first
;
var
nodeToUse
=
match
.
node
;
if
(
nodeToUse
!=
null
&&
nodeToUse
.
routes
!=
null
&&
nodeToUse
.
routes
.
length
>
0
)
{
if
(
nodeToUse
!=
null
&&
nodeToUse
.
routes
!=
null
&&
nodeToUse
.
routes
.
length
>
0
)
{
var
routes
=
nodeToUse
.
routes
;
var
routeMatch
=
_GetPageMatch
(
routes
[
0
]);
...
...
@@ -186,8 +225,7 @@ class ParseRouteTree {
class
_ParseRouteTreeNodeMatch
{
_ParseRouteTreeNodeMatch
(
this
.
node
);
_ParseRouteTreeNodeMatch
.
fromMatch
(
_ParseRouteTreeNodeMatch
match
,
this
.
node
)
{
_ParseRouteTreeNodeMatch
.
fromMatch
(
_ParseRouteTreeNodeMatch
match
,
this
.
node
)
{
parameters
=
<
String
,
String
>{};
if
(
match
!=
null
)
{
parameters
.
addAll
(
match
.
parameters
);
...
...
lib/get_navigation/src/routes/get_route.dart
View file @
639cab5
...
...
@@ -20,6 +20,7 @@ class GetPage {
final
Duration
transitionDuration
;
final
bool
fullscreenDialog
;
final
RouteSettings
settings
;
final
List
<
GetPage
>
pages
;
const
GetPage
({
@required
this
.
name
,
...
...
@@ -38,6 +39,7 @@ class GetPage {
this
.
transition
,
this
.
customTransition
,
this
.
fullscreenDialog
=
false
,
this
.
pages
,
})
:
assert
(
page
!=
null
),
assert
(
name
!=
null
),
assert
(
maintainState
!=
null
),
...
...
test/navigation/parse_route_test.dart
0 → 100644
View file @
639cab5
import
'package:flutter/cupertino.dart'
;
import
'package:flutter_test/flutter_test.dart'
;
import
'package:get/get.dart'
;
import
'package:get/get_navigation/src/root/parse_route.dart'
;
void
main
(
)
{
test
(
'Parse Page with children'
,
()
{
final
tree
=
ParseRouteTree
();
final
pageTree
=
GetPage
(
name:
'/city'
,
page:
()
=>
Container
(),
pages:
[
GetPage
(
name:
'/home'
,
page:
()
=>
Container
(),
pages:
[
GetPage
(
name:
'/bed-room'
,
page:
()
=>
Container
()),
GetPage
(
name:
'/living-room'
,
page:
()
=>
Container
()),
]),
GetPage
(
name:
'/work'
,
page:
()
=>
Container
(),
pages:
[
GetPage
(
name:
'/office'
,
page:
()
=>
Container
(),
pages:
[
GetPage
(
name:
'/pen'
,
page:
()
=>
Container
()),
GetPage
(
name:
'/paper'
,
page:
()
=>
Container
()),
]),
GetPage
(
name:
'/meeting-room'
,
page:
()
=>
Container
()),
]),
]);
tree
.
addRoute
(
pageTree
);
final
searchRoute
=
'/city/work/office/pen'
;
final
match
=
tree
.
matchRoute
(
searchRoute
);
expect
(
match
,
isNotNull
);
expect
(
match
.
route
.
name
,
searchRoute
);
});
test
(
'Parse Page without children'
,
()
{
final
tree
=
ParseRouteTree
();
final
pageTree
=
[
GetPage
(
name:
'/city'
,
page:
()
=>
Container
()),
GetPage
(
name:
'/city/home'
,
page:
()
=>
Container
()),
GetPage
(
name:
'/city/home/bed-room'
,
page:
()
=>
Container
()),
GetPage
(
name:
'/city/home/living-room'
,
page:
()
=>
Container
()),
GetPage
(
name:
'/city/work'
,
page:
()
=>
Container
()),
GetPage
(
name:
'/city/work/office'
,
page:
()
=>
Container
()),
GetPage
(
name:
'/city/work/office/pen'
,
page:
()
=>
Container
()),
GetPage
(
name:
'/city/work/office/paper'
,
page:
()
=>
Container
()),
GetPage
(
name:
'/city/work/meeting-room'
,
page:
()
=>
Container
()),
];
for
(
var
p
in
pageTree
)
{
tree
.
addRoute
(
p
);
}
final
searchRoute
=
'/city/work/office/pen'
;
final
match
=
tree
.
matchRoute
(
searchRoute
);
expect
(
match
,
isNotNull
);
expect
(
match
.
route
.
name
,
searchRoute
);
});
}
...
...
Please
register
or
login
to post a comment