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
Aniket Khote
2023-09-08 23:25:07 +0530
Browse Files
Options
Browse Files
Download
Plain Diff
Committed by
GitHub
2023-09-08 23:25:07 +0530
Commit
4ec320cbac3efc67e583a6d03cc75f471e904040
4ec320cb
2 parents
becac86e
ee7e312b
Merge branch 'jonataslaw:master' into master
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
159 additions
and
60 deletions
example_nav2/ios/Flutter/Generated.xcconfig
example_nav2/ios/Flutter/flutter_export_environment.sh
example_nav2/lib/app/modules/home/views/home_view.dart
example_nav2/lib/app/modules/profile/views/profile_view.dart
example_nav2/lib/app/modules/root/views/root_view.dart
lib/get_navigation/src/routes/parse_route.dart
lib/get_navigation/src/routes/router_outlet.dart
example_nav2/ios/Flutter/Generated.xcconfig
View file @
4ec320c
...
...
@@ -8,7 +8,7 @@ FLUTTER_BUILD_NAME=1.0.0
FLUTTER_BUILD_NUMBER=1
EXCLUDED_ARCHS[sdk=iphonesimulator*]=i386
EXCLUDED_ARCHS[sdk=iphoneos*]=armv7
DART_DEFINES=RkxVVFRFUl9XRUJfQVVUT19ERVRFQ1Q9dHJ1ZQ==,RkxVVFRFUl9XRUJfQ0FOVkFTS0lUX1VSTD1odHRwczovL3d3dy5nc3RhdGljLmNvbS9mbHV0dGVyLWNhbnZhc2tpdC9i
MjAxODNlMDQwOTYwOTRiY2MzN2Q5Y2RlMmE0Yjk2ZjVjYzY4NGNm
Lw==
DART_DEFINES=RkxVVFRFUl9XRUJfQVVUT19ERVRFQ1Q9dHJ1ZQ==,RkxVVFRFUl9XRUJfQ0FOVkFTS0lUX1VSTD1odHRwczovL3d3dy5nc3RhdGljLmNvbS9mbHV0dGVyLWNhbnZhc2tpdC9i
OGQzNTgxMGU5MWFiOGZjMzliYTVlN2E0MWJmZjZmNjk3ZThlM2E4
Lw==
DART_OBFUSCATION=false
TRACK_WIDGET_CREATION=true
TREE_SHAKE_ICONS=false
...
...
example_nav2/ios/Flutter/flutter_export_environment.sh
View file @
4ec320c
...
...
@@ -7,7 +7,7 @@ export "FLUTTER_TARGET=/Users/jonatasborges/getx5/getx/example_nav2/lib/main.dar
export
"FLUTTER_BUILD_DIR=build"
export
"FLUTTER_BUILD_NAME=1.0.0"
export
"FLUTTER_BUILD_NUMBER=1"
export
"DART_DEFINES=RkxVVFRFUl9XRUJfQVVUT19ERVRFQ1Q9dHJ1ZQ==,RkxVVFRFUl9XRUJfQ0FOVkFTS0lUX1VSTD1odHRwczovL3d3dy5nc3RhdGljLmNvbS9mbHV0dGVyLWNhbnZhc2tpdC9i
MjAxODNlMDQwOTYwOTRiY2MzN2Q5Y2RlMmE0Yjk2ZjVjYzY4NGNm
Lw=="
export
"DART_DEFINES=RkxVVFRFUl9XRUJfQVVUT19ERVRFQ1Q9dHJ1ZQ==,RkxVVFRFUl9XRUJfQ0FOVkFTS0lUX1VSTD1odHRwczovL3d3dy5nc3RhdGljLmNvbS9mbHV0dGVyLWNhbnZhc2tpdC9i
OGQzNTgxMGU5MWFiOGZjMzliYTVlN2E0MWJmZjZmNjk3ZThlM2E4
Lw=="
export
"DART_OBFUSCATION=false"
export
"TRACK_WIDGET_CREATION=true"
export
"TREE_SHAKE_ICONS=false"
...
...
example_nav2/lib/app/modules/home/views/home_view.dart
View file @
4ec320c
...
...
@@ -63,4 +63,3 @@ class HomeView extends GetView<HomeController> {
);
}
}
...
...
example_nav2/lib/app/modules/profile/views/profile_view.dart
View file @
4ec320c
...
...
@@ -37,7 +37,6 @@ class ProfileView extends GetView<ProfileController> {
child:
const
Text
(
'Show a test dialog in Home router outlet'
),
onPressed:
()
{
//shows a dialog
Get
.
defaultDialog
(
title:
'Test Dialog In Home Outlet !!'
,
barrierDismissible:
true
,
...
...
example_nav2/lib/app/modules/root/views/root_view.dart
View file @
4ec320c
...
...
@@ -10,31 +10,21 @@ class RootView extends GetView<RootController> {
@override
Widget
build
(
BuildContext
context
)
{
return
RouterOutlet
.
builder
(
delegate:
Get
.
nestedKey
(
null
),
builder:
(
context
)
{
final
title
=
context
.
location
;
return
Scaffold
(
drawer:
const
DrawerWidget
(),
appBar:
AppBar
(
title:
Text
(
title
),
centerTitle:
true
,
),
//body: HomeView(),
return
Scaffold
(
drawer:
const
DrawerWidget
(),
appBar:
AppBar
(
title:
RouterListener
(
builder:
(
context
)
{
final
title
=
context
.
location
;
return
Text
(
title
);
}),
centerTitle:
true
,
),
//body: HomeView(),
body:
GetRouterOutlet
(
initialRoute:
Routes
.
home
,
delegate:
Get
.
nestedKey
(
null
),
anchorRoute:
'/'
,
filterPages:
(
afterAnchor
)
{
// print(afterAnchor);
// print('dddddddddddddddddd');
// print(afterAnchor.take(1));
return
afterAnchor
.
take
(
1
);
},
),
);
},
body:
GetRouterOutlet
(
initialRoute:
Routes
.
home
,
anchorRoute:
'/'
,
),
);
}
}
...
...
lib/get_navigation/src/routes/parse_route.dart
View file @
4ec320c
...
...
@@ -75,6 +75,10 @@ class RouteDecoder {
@override
int
get
hashCode
=>
currentTreeBranch
.
hashCode
^
pageSettings
.
hashCode
;
@override
String
toString
()
=>
'RouteDecoder(currentTreeBranch:
$currentTreeBranch
, pageSettings:
$pageSettings
)'
;
}
class
ParseRouteTree
{
...
...
lib/get_navigation/src/routes/router_outlet.dart
View file @
4ec320c
...
...
@@ -84,7 +84,9 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, RouteDecoder> {
required
String
initialRoute
,
Iterable
<
GetPage
>
Function
(
Iterable
<
GetPage
>
afterAnchor
)?
filterPages
,
GetDelegate
?
delegate
,
String
?
restorationScopeId
,
})
:
this
.
pickPages
(
restorationScopeId:
restorationScopeId
,
pickPages:
(
config
)
{
Iterable
<
GetPage
<
dynamic
>>
ret
;
if
(
anchorRoute
==
null
)
{
...
...
@@ -114,6 +116,7 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, RouteDecoder> {
GetPage
Function
(
GetDelegate
delegate
)?
emptyPage
,
required
Iterable
<
GetPage
>
Function
(
RouteDecoder
currentNavStack
)
pickPages
,
bool
Function
(
Route
<
dynamic
>,
dynamic
)?
onPopPage
,
String
?
restorationScopeId
,
GlobalKey
<
NavigatorState
>?
navigatorKey
,
GetDelegate
?
delegate
,
})
:
super
(
...
...
@@ -124,17 +127,22 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, RouteDecoder> {
].
whereType
<
GetPage
>();
if
(
pageRes
.
isNotEmpty
)
{
return
GetNavigator
(
onPopPage:
onPopPage
??
(
route
,
result
)
{
final
didPop
=
route
.
didPop
(
result
);
if
(!
didPop
)
{
return
false
;
}
return
true
;
},
pages:
pageRes
.
toList
(),
key:
navigatorKey
,
return
InheritedNavigator
(
navigatorKey:
navigatorKey
??
Get
.
rootController
.
rootDelegate
.
navigatorKey
,
child:
GetNavigator
(
restorationScopeId:
restorationScopeId
,
onPopPage:
onPopPage
??
(
route
,
result
)
{
final
didPop
=
route
.
didPop
(
result
);
if
(!
didPop
)
{
return
false
;
}
return
true
;
},
pages:
pageRes
.
toList
(),
key:
navigatorKey
,
),
);
}
return
(
emptyWidget
?.
call
(
rDelegate
)
??
const
SizedBox
.
shrink
());
...
...
@@ -159,35 +167,44 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, RouteDecoder> {
);
}
extension
PagesListExt
on
List
<
GetPage
>
{
Iterable
<
GetPage
>
pickAtRoute
(
String
route
)
{
return
skipWhile
((
value
)
{
return
value
.
name
!=
route
;
});
class
InheritedNavigator
extends
InheritedWidget
{
const
InheritedNavigator
({
super
.
key
,
required
super
.
child
,
required
this
.
navigatorKey
,
});
final
GlobalKey
<
NavigatorState
>
navigatorKey
;
static
InheritedNavigator
?
of
(
BuildContext
context
)
{
return
context
.
dependOnInheritedWidgetOfExactType
<
InheritedNavigator
>();
}
Iterable
<
GetPage
>
pickAfterRoute
(
String
route
)
{
return
pickAtRoute
(
route
).
skip
(
1
);
@override
bool
updateShouldNotify
(
InheritedNavigator
oldWidget
)
{
return
true
;
}
}
class
GetRouterOutletInherited
extends
InheritedWidget
{
final
String
anchorRoute
;
const
GetRouterOutletInherited
({
super
.
key
,
required
this
.
anchorRoute
,
required
Widget
child
,
})
:
super
(
child:
child
);
extension
NavKeyExt
on
BuildContext
{
GlobalKey
<
NavigatorState
>?
get
parentNavigatorKey
{
return
InheritedNavigator
.
of
(
this
)?.
navigatorKey
;
}
}
static
GetRouterOutletInherited
?
of
(
BuildContext
context
)
{
return
context
.
dependOnInheritedWidgetOfExactType
<
GetRouterOutletInherited
>();
extension
PagesListExt
on
List
<
GetPage
>
{
/// Returns the route and all following routes after the given route.
Iterable
<
GetPage
>
pickFromRoute
(
String
route
)
{
return
skipWhile
((
value
)
=>
value
.
name
!=
route
);
}
@override
bool
updateShouldNotify
(
covariant
InheritedWidget
oldWidget
)
{
return
true
;
/// Returns the routes after the given route.
Iterable
<
GetPage
>
pickAfterRoute
(
String
route
)
{
// If the provided route is root, we take the first route after root.
if
(
route
==
'/'
)
{
return
pickFromRoute
(
route
).
skip
(
1
).
take
(
1
);
}
// Otherwise, we skip the route and take all routes after it.
return
pickFromRoute
(
route
).
skip
(
1
);
}
}
...
...
@@ -221,3 +238,93 @@ class IndexedRouteBuilder<T> extends StatelessWidget {
return
builder
(
context
,
routes
,
index
);
}
}
mixin
RouterListenerMixin
<
T
extends
StatefulWidget
>
on
State
<
T
>
{
RouterDelegate
?
delegate
;
void
_listener
()
{
setState
(()
{});
}
VoidCallback
?
disposer
;
@override
void
didChangeDependencies
()
{
super
.
didChangeDependencies
();
disposer
?.
call
();
final
router
=
Router
.
of
(
context
);
delegate
??=
router
.
routerDelegate
as
GetDelegate
;
delegate
?.
addListener
(
_listener
);
disposer
=
()
=>
delegate
?.
removeListener
(
_listener
);
}
@override
void
dispose
()
{
super
.
dispose
();
disposer
?.
call
();
}
}
class
RouterListenerInherited
extends
InheritedWidget
{
const
RouterListenerInherited
({
super
.
key
,
required
Widget
child
,
})
:
super
(
child:
child
);
static
RouterListenerInherited
?
of
(
BuildContext
context
)
{
return
context
.
dependOnInheritedWidgetOfExactType
<
RouterListenerInherited
>();
}
@override
bool
updateShouldNotify
(
covariant
InheritedWidget
oldWidget
)
{
return
true
;
}
}
class
RouterListener
extends
StatefulWidget
{
const
RouterListener
({
Key
?
key
,
required
this
.
builder
,
})
:
super
(
key:
key
);
final
WidgetBuilder
builder
;
@override
State
<
RouterListener
>
createState
()
=>
RouteListenerState
();
}
class
RouteListenerState
extends
State
<
RouterListener
>
with
RouterListenerMixin
{
@override
Widget
build
(
BuildContext
context
)
{
return
RouterListenerInherited
(
child:
Builder
(
builder:
widget
.
builder
));
}
}
class
BackButtonCallback
extends
StatefulWidget
{
const
BackButtonCallback
({
Key
?
key
,
required
this
.
builder
})
:
super
(
key:
key
);
final
WidgetBuilder
builder
;
@override
State
<
BackButtonCallback
>
createState
()
=>
RouterListenerState
();
}
class
RouterListenerState
extends
State
<
BackButtonCallback
>
with
RouterListenerMixin
{
late
ChildBackButtonDispatcher
backButtonDispatcher
;
@override
void
didChangeDependencies
()
{
super
.
didChangeDependencies
();
final
router
=
Router
.
of
(
context
);
backButtonDispatcher
=
router
.
backButtonDispatcher
!.
createChildBackButtonDispatcher
();
}
@override
Widget
build
(
BuildContext
context
)
{
backButtonDispatcher
.
takePriority
();
return
widget
.
builder
(
context
);
}
}
...
...
Please
register
or
login
to post a comment